2012-03-09 93 views
9

我正在使用具有DateTimeField(auto_now_add = True)來捕獲發佈日期(pub_date)的文章,如模型。這看起來像下面這樣:使用日期時間字段按天分組Django模型條目

我想要做一個查詢,計算每天添加多少文章帖子或條目。換句話說,我想查詢條目並按日期分組(最終是月,小時,秒等)。這看起來像在SQLite的外殼下面:

select pub_date, count(id) from "myapp_article" 
where id = 1 
group by strftime("%d", pub_date) 
; 

它返回類似:

2012-03-07 18:08:57.456761|5 
2012-03-08 18:08:57.456761|9 
2012-03-09 18:08:57.456761|1 

我似乎無法弄清楚如何從一個Django的QuerySet得到這一結果。我知道如何獲得a similar result using itertools.groupby,但在這種情況下這是不可能的(下面的解釋)。

該查詢的最終結果將用於顯示每天帖子數量的圖形中。我正在嘗試使用Django Chartit包來實現此目標。 Chartit對數據源(DataPool)進行約束。源必須是Model,Manager或QuerySet,因此根據我所知,使用itertools.groupby不是一個選項。

所以問題是...... 如何按日期分組或彙總條目並以QuerySet對象結束?

回答

31

創建一個額外的域,僅存儲日期數據(沒有時間),並以計數註釋:

Article.objects.extra({'published':"date(pub_date)"}).values('published').annotate(count=Count('id')) 

結果將是:

published,count 
2012-03-07,5 
2012-03-08,9 
2012-03-09,1 
+0

如果我們想獲得的所有條目除了在同一查詢中爲每個pub_date計數? – 2016-03-09 13:03:08

相關問題