Наследование модели в django-nonrel на движке приложения

В платформе webapp движка приложений я могу использовать полимодель для создания (например) модели цели, а затем ряда дочерних моделей, представляющих различные типы целей, которые имеют различные наборы полей в зависимости от типа цели. Это позволяет мне просто запрашивать сущности цели и получать обратно все дочерние типы.

Есть ли способ продублировать это, используя модели django-nonrel? Похоже, что простое наследование модели не сработает, поскольку django-nonrel требует, чтобы базовый класс был абстрактным. Я ошибаюсь в этом, или есть другой способ добиться того же эффекта, о котором я не знаю?

Изменить: одна из возможностей, которая приходит мне в голову, - это пойти дальше и использовать обычное наследование модели django, установить базовый класс Goal на абстрагирование по мере необходимости и создать подмодели, а затем вместо того, чтобы пытаться запрашивать объекты Goal, создать модель для каждый пользователь с ListField, который содержит ссылки на различные сущности подкласса и извлекает ListField. Кажется ли это действенной альтернативой?


person Community    schedule 02.03.2011    source источник


Ответы (1)


Вы можете использовать ListField в djangotoolbox, он расширит django-nonrel с помощью нового поля типа ListField, это как поле типа "один ко многим" в Django, что вы можете сохранить все дочерние объекты в поле с помощью ListProperty.

Есть полезная документация по использованию ListField: http://django-mongodb-engine.readthedocs.org/en/latest/topics/lists-and-dicts.html

Модель

from djangotoolbox.fields import ListField

class Post(models.Model):
    ...
    tags = ListField()

использование

>>> Post(tags=['django', 'mongodb'], ...).save()
>>> Post.objecs.get(...).tags
['django', 'mongodb']

Уведомление

Для возможности лучше сохранить идентификатор вместо внешнего ключа, потому что вы сохраняете объекты разных типов в одно поле ListField. И лучше повторно реализовать функцию __del__, чтобы убедиться, что удаление будет работать правильно.

person Colin Su    schedule 02.04.2014