Python Django中的自定义聚合注释
我有很多小组,每个小组都有一个修订版,每个修订版都有几个月的时间 我想输出所有带有注释的组对象 对于每个组,只应选择最新版本,然后将所有月份相加 我不确定能否在Django完成。我试过类似的东西Python Django中的自定义聚合注释,python,django,django-models,django-views,django-queryset,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')) ) 并希望得到一个包含所有组的查询集,每个组
Group.objects.annotate(
month_sum=Revision.objects.filter(date__lte=my_date).latest('date').aggregate(Sum('months__amount'))
)
并希望得到一个包含所有组的查询集,每个组都有一个summonth\u sum
您能试试这个吗:
qs = Group.objects.filter(revision__date__lte=my_date).annotate(month_sum=Sum('months__amount'))
通过在shell中打印生成的DB查询,您可以调试并尝试取消理解如何进行正确的查询:
print str(qs.query)
编辑:
我认为,用旧版本显示分组可能会对您有所帮助
如果
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)))
太棒了。问题是我只想要最新的版本,而不是所有的版本,所以我需要做一些类似于
filter(revision\u date\u lte=my\u date)。latest()
我想我很快就能让它工作了。这似乎对一个群体有效。我猜这是因为每个小组都有一些估计,每个估计都有一些修正。在您的示例中,它将过滤每个组中的相同版本。我真的不知道如何解决它,但我感谢你的帮助<代码>django聚合如果应在django中实现:-D