django ORM查询集按月份,星期,TruncMonth
问题描述:
如何group by
queryset on Django ORM中的datetime字段?django ORM查询集按月份,星期,TruncMonth
型号:
class test1(models.Model):
id = models.AutoField(primary_key=True, unique=True, verbose_name='id')
name = models.CharField(verbose_name='name', max_length=200)
cdate = models.DateField(verbose_name='date', default=timezone.now)
查询集数据
for i in test1.objects.all():
print i.id, i.name, i.cdate
2 a 2017-08-11
3 b 2017-08-11
4 c 2017-08-11
5 a 2017-08-11
6 a 2017-08-11
需要按月和计数Django的ORM的ID。
查询集
data = test1.objects.annotate(month=TruncMonth('cdate')).values('month').annotate(c=Count('id'))
for i in data:
print i
结果
{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)}
为什么不呢?
{'c': 5, 'month': datetime.date(2017, 8, 1)}
答
您是否为您的模型设置了默认排序?如果是,则可能会出现向分组添加订单字段的问题。它记录了here。您可以尝试从您的查询中删除订单。
data = test1.objects.annotate(month=TruncMonth('cdate')).values('month').annotate(c=Count('id')).order_by()
答
您尝试计独特价值id
尝试更换
.annotate(c=Count('id'))
上
.annotate(c=Count('month'))
# ^^^^^
谢谢我的朋友,你的榜样的作品,你是从俄罗斯? – Alexandr
我来自白俄罗斯 –
如果它帮助你,你能接受并upvote我的答案? –