Как запросить модель наследования django? - PullRequest
1 голос
/ 09 января 2020

У меня есть модели

class Parent(Model):
    pass

class Child1(Parent):
    att1 = CharField()

class Child2(Parent):
    att2 = CharField()

class Final(Model):
    parent = ForeignKey('Parent', related_name="final")

Мне нужен набор запросов

Final.objects.filter(parent__att1='abc')

Но только Child1 наследование Родитель имеет att1 . Как сделать запрос att1 in Child1 not Child2 ?

1 Ответ

2 голосов
/ 09 января 2020

Можно выполнить запрос с помощью:

Final.objects.filter(<b>parent__child1__att1</b>='abc')

В Django наследование модели (неабстрактных моделей) достигается путем добавления неявного OneToOneField в дочерние модели. Таким образом, мы можем использовать это отношение путем запроса в reverse .

. Таким образом, будет создан запрос, который выглядит следующим образом:

SELECT final.*
FROM final
INNER JOIN parent ON final.parent_id = parent.id
INNER JOIN child1 ON <b>parent.id = child1.parent_ptr_id</b>
WHERE child1.att1 = 'abc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...