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))
它不是聚合的,但它会得到最小/最大值