Фильтровать объекты, если отношения один ко многим не существует - PullRequest
1 голос
/ 23 октября 2019

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

ModelA:
id = models.AutoField(primary_key=True)

ModelB:
id = models.AutoField(primary_key=True)
titlecomponent = models.ForeignKey('ModelA',on_delete=models.PROTECT)

Как я могу получить все объекты ModelA, которые не имеют никаких отношений записи в ModelB.

1 Ответ

1 голос
/ 23 октября 2019

Вы можете сделать это, сравнивая с None:

ModelA.objects.filter(<b>modelb=None</b>)

Причина, по которой это работает, заключается в том, что выполняется LEFT OUTER JOIN, и, таким образом, если не существует связанного ModelB, тогда строка,содержит NULL s.

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

SELECT app_modela.*
FROM app_modela
<b>LEFT OUTER</b> JOIN app_modelb ON app_modelb.titlecomponent = app.modela.id
WHERE app_modelb.id <b>IS NULL</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...