Есть ли способ сделать только один запрос суперкласса, а затем получить список всех соответствующих подклассов в django?[дубликат]
-
12-12-2019 - |
Вопрос
Возможный дубликат:
Наследование модели 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