Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Наследование моделей Django, проблема с ORM

#orm #django


Столкнулся с такой проблемой, есть 3 модели
class A(models.Model):
   ...

class B(A):
  ...

class C(B):
  ...

print A.object.all() # Выдает модели и B и С, а надо только А
    


Ответы

Ответ 1



Модель ORM в Django организована так, что когда Вы создаёте модель наследованием от другой неабстарктной модели то поля родительской модели не копируются в дочернюю модель, вместо этого в БД в записи дочерней таблицы просто создаётся внешний ключ на запись в родительской таблице (сделано это сознательно из архитектурных соображений). Потому если запрашивать все объекты для родительской таблицы - будут находиться и записи относящиеся к объектам дочерних моделей. Потому нужно либо фильтровать объекты родительской модели которые относятся к дочерним, либо создавать абстрактные модели от которых наследовать как родителя (в этом случае модель «A») так и детей («B»).

Комментариев нет:

Отправить комментарий