Django 如何找到相关对象的相关对象的聚合计数最小计数?
我有这样的关系模型:Django 如何找到相关对象的相关对象的聚合计数最小计数?,django,django-models,Django,Django Models,我有这样的关系模型: 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) 我正试图找到一种方法,用孙子总数来注释父查询集 例如,假设两个家
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)
我正试图找到一种方法,用孙子总数来注释父查询集
例如,假设两个家长:(A,B)
。
A
有3个子项:(A.A、A.b、A.c)
。
A.A
有一个孙子,
A.b
有两个孙子,
A.c
有三个孙子,
B
有两个子项:(B.a,B.B)
。
B.a
有两个孙子。
B.B
有3个孙子
我想用每个父项上每个子项的孙子数的集合来注释父查询集。例如,使用Min
进行聚合将是A:1,B:2
或使用Avg
进行聚合将是A:2,B:2.5
我相信这可能需要.extra
来完成,但我不确定
如果聚合函数是硬编码的,也就是说,
Parent.objects.all()。注释\u min\u ngc\u per\u c()
,这没关系,但请尽可能解释我可以用多个聚合进行复制 获取Min或Max的一种解决方案是使用如下子查询:
counts = Child.objects.filter(parent=OuterRef('pk'))
counts = counts.annotate(num_grandchildren=Count('grandchild_set'))
counts = counts.order_by('-num_grandchildren').values('num_grandchildren')[:1]
qs = Parent.objects.annotate(min_num_grandchildren=Subquery(counts))
它不是聚合的,但它会得到最小/最大值