假设我们有一个模型:
class Critters(models.Model):
name = models.CharField()
parent = models.ForeignKey(Critters, blank=True, null=True, on_delete=models.CASCADE)
字符串
一开始是一些小动物:
id Name Parent
== ======== ========
0 Critter1
1 Critter2
2 Critter3
型
然后,一些动物生了一个孩子:
id Name Parent
== ======== ======
0 Critter1
1 Critter2
2 Critter3
3 Child1 0
4 Child2 1
型
我想请求选择所有没有孩子的父母(即没有生物有父母,也没有父母有子女):
id Name Parent
== ======== ======
2 Critter3
型
我认为这可以用annotate
和exact
django的指令来完成,但我不知道我到底如何才能完成这个任务。
UPDATE1当然,Name
字段中的critter
和child
,例如,我们不能通过Name
过滤表。
2条答案
按热度按时间zz2j4svz1#
我认为这可以通过注解和精确的django指令来完成。
它可以做得更简单。您可以通过以下方式进行过滤:
字符串
因此,我们在反向关系上进行过滤。这是
LEFT OUTER JOIN
,然后检查是否是None
。因此,它将生成一个类似于以下的查询:型
u1ehiz5o2#
有点搞不清你想干什么。如果要选择父项不存在的所有值,可以通过以下操作实现:
字符串
.exclude
也可以使用。