Djang自定义聚合注释

2024-03-29 06:59:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我不确定在Django是否能做到。我试过

Group.objects.annotate(
    month_sum=Revision.objects.filter(date__lte=my_date).latest('date').aggregate(Sum('months__amount'))
)

并希望得到所有组的一个查询集,每个组都有一个和month_sum。在


Tags: 对象django版本dateobjects时间group小组
1条回答
网友
1楼 · 发布于 2024-03-29 06:59:02

你能试试这个吗:

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

通过在shell中打印生成的DB查询,您可以调试并尝试取消对如何进行正确查询的理解:

^{pr2}$

编辑:

为了显示带有旧版本的组,我认为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)))

相关问题 更多 >