2010-05-31 62 views
4

分组的日期属性我想将这个查询从SQL到Django的: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;" 

导致的问题是由组汇总一个月时的一部分。我想这(这似乎合乎逻辑),但没有奏效:

HourEntries.objects.order_by("date").values("date__month").aggregate(Sum("quantity")) 

回答

2

aggregate只能产生一个总价值。

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

from datetime import datetime 
this_month = datetime.now().month 
HourEntries.objects.filter(date__month=this_month).aggregate(Sum("quantity")) 

因此,为了获得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;") 
+0

谢谢你的回答...我的原始查询不起作用,所以我使用了你给我的python代码。 – sebpiq 2010-05-31 12:54:23

+0

这真的有用吗?! Specs说你必须在RAW查询中包含primary_key ...“只有一个你不能忽略的字段 - 主键字段Django使用主键来标识模型实例,所以它必须包含在原始查询。如果忘记包含主键,则会引发InvalidQuery异常。“ [这里/最后一段](https://docs.djangoproject.com/en/dev/topics/db/sql/#deferring-model-fields) – 2013-01-25 10:15:40

0

我想你不能在“量”碎石values("date__month")之后,因为这树叶在查询集唯一的“日”和“月”。

+1

甚至不能在值的参数中使用字段查找... [字段查找](https://docs.djangoproject.com/en/dev/ref/models/querysets/#id4) – 2013-01-25 10:10:54