我想在Django中按天分组的请求,但我想用0填充没有结果的那一天,有可能吗?
# I use the following query
AccessLog
.objects
.filter(attempt_time__gte=last_30_days)
.annotate(day=TruncDay('attempt_time'))
.values('day', 'username')
.annotate(c = Count('username'))
.order_by('day')
答案 0 :(得分:1)
否,使用注释是不可能的。注释可用于相似类型,例如,Coalesce函数需要相似的类型,并且混合日期时间和数字将导致数据库错误。与Case函数相同,每个结果只有一个输出字段。
函数TruncDay返回一个DateTime(在这种情况下),其中字段Day的最小值设置为DateTime,因此例如2015-06-15 14:30:50.000321+00:00
将转换为2015-01-01 00:00:00+00:00
文档概述。并且实际注释的值有时不能是整数,有时不能是datetime对象。
在这种情况下,有时表示值是“ None”(无),更可取的方法是将其设置为最小值/最大值(我们假定该值不能等于它),例如:
AccessLog.objects.filter(
attempt_time__gte=last_30_days
).annotate(
day=Coalesce(TruncDay('attempt_time'), datetime.min)
).values('day', 'username').annotate(
c=Count('username')
).order_by('day')