如何找到相关对象的相关对象的最小总计数?

时间:2018-08-06 01:05:58

标签: 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)

我正在尝试找到一种方法来注释具有总计孙子项总数的父级查询集。

例如,说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(),但请尽我所能解释,我可以使用多个聚合进行复制。

1 个答案:

答案 0 :(得分:1)

获得Min或Max的一种解决方案是使用像这样的SubQuery:

A

它不是聚合的,但是可以让您达到最小/最大。