1

我有一个模型,它有一个日期时间字段,我试图在按日期分组时对其进行注释。

例如:

order_totals = Transfer.objects.filter(created__range=[datetime.datetime.combine(datetime.date.today(), datetime.time.min) + datetime.timedelta(days=-5), datetime.datetime.combine(datetime.date.today(), datetime.time.max)]).values('created').annotate(Count('id'))

上面的问题是它按日期时间字段的每秒/毫秒分组,而不仅仅是日期。

我该怎么做?

4

2 回答 2

2

您应该能够通过使用 QuerySet.extra 并在查询中添加一列来解决此问题

例如。

qs.filter(...).extra(select={'created_date': 'created::date'}).values('created_date')
于 2012-04-18T06:46:00.243 回答
1

Django 1.8开始,您还可以使用新的DateTime 表达式(奇怪的是,它没有记录在内置表达式表中)。

import pytz
from django.db.models.expressions import DateTime

qs.annotate(created_date=DateTime('created', 'day', pytz.UTC))

如果要分组created_date,只需链接另一个聚合表达式:

qs.annotate(created_date=DateTime('created', 'day', pytz.UTC)).values('created_date').annotate(number=Count('id'))

(需要冗余values来生成适当的GROUP BY. 请参阅Django 文档中的聚合主题)。

于 2015-09-30T17:25:17.947 回答