#orm #django
Столкнулся с такой проблемой, есть 3 модели class A(models.Model): ... class B(A): ... class C(B): ... print A.object.all() # Выдает модели и B и С, а надо только А
Ответы
Ответ 1
Модель ORM в Django организована так, что когда Вы создаёте модель наследованием от другой неабстарктной модели то поля родительской модели не копируются в дочернюю модель, вместо этого в БД в записи дочерней таблицы просто создаётся внешний ключ на запись в родительской таблице (сделано это сознательно из архитектурных соображений). Потому если запрашивать все объекты для родительской таблицы - будут находиться и записи относящиеся к объектам дочерних моделей. Потому нужно либо фильтровать объекты родительской модели которые относятся к дочерним, либо создавать абстрактные модели от которых наследовать как родителя (в этом случае модель «A») так и детей («B»).
Комментариев нет:
Отправить комментарий