我的关系模型如下:
Parent(models.Model):
pass
Child(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
Grandchild(models.Model):
child = models.ForeignKey(Child, on_delete=models.CASCADE)
我正在尝试找到一种方法来注释具有总计孙子项总数的父级查询集。
例如,说2个父母:(A, B)
。
A
有3个孩子:(A.a, A.b, A.c)
。
A.a
有1个孙子,
A.b
有2个孙子,
A.c
有3个孙子,
B
有2个孩子:(B.a, B.b)
。
B.a
有2个孙子。
B.b
有3个孙子。
我想用每个父级上每个子级的孙子项总数来注释父级查询集。例如。与Min
聚合将是A:1, B:2
或与Avg
聚合将是A:2, B:2.5
我相信这可能需要.extra
才能完成,但是我不确定。
如果聚合函数是硬编码的,那就很好。 Parent.objects.all().annotate_min_ngc_per_c()
,但请尽我所能解释,我可以使用多个聚合进行复制。
答案 0 :(得分:1)
获得Min或Max的一种解决方案是使用像这样的SubQuery:
A
它不是聚合的,但是可以让您达到最小/最大。