2017-08-11 77 views
0

如何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)} 

回答

1

您是否爲您的模型設置了默認排序?如果是,則可能會出現向分組添加訂單字段的問題。它記錄了here。您可以嘗試從您的查詢中刪除訂單。

data = test1.objects.annotate(month=TruncMonth('cdate')).values('month').annotate(c=Count('id')).order_by() 
+0

謝謝我的朋友,你的榜樣的作品,你是從俄羅斯? – Alexandr

+0

我來自白俄羅斯 –

+0

如果它幫助你,你能接受並upvote我的答案? –

0

您嘗試計獨特價值id 嘗試更換

.annotate(c=Count('id')) 

.annotate(c=Count('month')) 
#     ^^^^^