Django 查询空的related_set

zmb*_*mbq 3 django left-join

我有两个具有一对多关系的模型 - 父母和孩子。我想查询所有没有孩子的父母。在 SQL 中,我会做这样的事情:

SELECT p.*
    FROM parent p
    LEFT JOIN children c on (p.id=c.parent_id)
WHERE c.id IS NULL
Run Code Online (Sandbox Code Playgroud)

如何对单个 Django 查询执行相同的操作?

该模型的相关部分是:

class Parent(model):
    ...

class Child(model):
    parent = ForeignKey(Parent, related_name='children')
Run Code Online (Sandbox Code Playgroud)

iul*_*ian 5

使用isnull字段查找,它:

采用TrueFalse,分别对应于IS NULLIS NOT NULL 的SQL 查询。

因此,查询集将如下所示:

Parent.objects.filter(children__isnull=True)

  • @Shovalt你也可以考虑`Parent.objects.exclude(children__isnull=True)`。关于重复项,这仅取决于您的数据模型以及您在父表中存储的内容。 (2认同)