Django:按月/年分组的日期属性的总和

seb*_*piq 5 python django django-orm

我想把这个查询从SQL转到Django:

"select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;"
Run Code Online (Sandbox Code Playgroud)

导致问题的部分是聚合时按月分组.我试过这个(看似合乎逻辑),但它不起作用:

HourEntries.objects.order_by("date").values("date__month").aggregate(Sum("quantity"))
Run Code Online (Sandbox Code Playgroud)

Lak*_*sad 2

aggregate只能产生一个聚合值。

您可以通过以下查询获取当月的小时总数。

from datetime import datetime
this_month = datetime.now().month
HourEntries.objects.filter(date__month=this_month).aggregate(Sum("quantity"))
Run Code Online (Sandbox Code Playgroud)

因此,要获取 HourEntry 所有月份的聚合值,您可以循环数据库中所有月份的查询集。但最好使用原始sql。

HourEntries.objects.raw("select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;")
Run Code Online (Sandbox Code Playgroud)