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

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

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

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

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__, чтобы убедиться, что удаление будет работать хорошо.

Другие вопросы по тегам