我有以下型号:
class Parent(models.Model):
title = models.CharField(max_length=255)
class Child(models.Models):
title = models.CharField(max_length=255)
parent = models.ForeignKey(Parent)
如何从Parent获取所有条目,其中Child的数量等于0?我需要通过父模型来完成这样的事情:
Parent.objects.filter(smth_condition)
答案 0 :(得分:2)
。来自django.db.models import Count
Parent.objects.annotate(cc=Count('child')).filter(cc=0)
可以使用annotate()子句生成每个对象的摘要。当指定annotate()子句时,QuerySet中的每个对象都将使用指定的值进行注释。
以类似于Lookups that span relationships的方式,与您要查询的模型或模型相关的模型或模型字段的聚合和注释可以包括遍历“反向”关系。此处也使用相关模型和双下划线的小写名称。
也可以过滤带注释的值。注释的别名可以在filter()和exclude()子句中使用,方法与任何其他模型字段相同。
另一种方式,根据您的表格可能更有效,只是
Parent.objects.filter(child=None)
答案 1 :(得分:1)
也可以尝试
Parent.objects.filter(child=None)
# or
Parent.objects.filter(child__isnull=True)