Django中的自定义聚合注释

时间:2014-11-11 23:02:09

标签: python django django-models django-views django-queryset

我有很多小组,每个小组都有一个修订版,每个修订版都有几个月。

我想输出带注释的所有组对象。

对于每个组,它应该只选择最新版本,然后将所有月份相加。

我不确定它是否可以在Django中完成。我试过像

这样的东西
Group.objects.annotate(
    month_sum=Revision.objects.filter(date__lte=my_date).latest('date').aggregate(Sum('months__amount'))
)

并希望得到一个包含所有组的查询集,每个组都有一个总和month_sum

1 个答案:

答案 0 :(得分:0)

你能试试这个:

qs = Group.objects.filter(revision__date__lte=my_date).annotate(month_sum=Sum('months__amount'))

您可以通过在shell中打印生成的数据库查询来调试并尝试解决如何进行正确查询的问题:

print str(qs.query)

修改

要显示具有旧版本的群组,我认为django-aggregate-if可能会帮助您

运行pip install django-aggregate-if

from django.db.models import Q
from aggregate_if import Sum

revision = Revision.objects.filter(revision__date__lte=my_date).latest()
qs = Group.objects.all().annotate(month_sum=Sum('months__amount', only=Q(revision=revision)))