Есть ли способ сделать только один запрос суперкласса, а затем получить список всех соответствующих подклассов в django?[дубликат]

StackOverflow https://stackoverflow.com//questions/9674046

Вопрос

Возможный дубликат:
Наследование модели Django запрашивает центральную таблицу

Следуя официальным документам, найденным здесь
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

Я вижу, что могу запросить место, которое является суперрестораном, через

p = Place.objects.filter(name="Bob's Cafe")

Итак, есть ли в этот момент способ проверить, относятся ли возвращаемые объекты также к типу подкласса «Ресторан», и если да, то получить доступ к полям их подкласса?

На данный момент все, что я могу сказать, это то, что все возвращаемые объекты относятся к классу Place, а свойства и методы их подкласса недоступны, поскольку объект не преобразуется в его подкласс.

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

Это было полезно?

Решение

Итак, есть ли в этот момент способ проверить, относятся ли возвращаемые объекты также к типу подкласса «Ресторан», и если да, то получить доступ к полям их подкласса?

Если вы запросили модель Place, возвращаемые объекты представляют собой экземпляры Place, которым не известны какие-либо подклассы, связанные с MTI.Вам необходимо предоставить поле в суперклассе для связи с подклассом.Видеть Создание универсального дизайна многотабличного наследования в Django

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top