2013-07-27 83 views
6

我正在尋找快速方法來計算過去30天內創建的模型對象,分別爲每一天。例如:獲取最近30天內創建的對象,每過去一天

27.07.2013 (today) - 3 objects created 
26.07.2013 - 0 objects created 
25.07.2013 - 2 objects created 
... 
27.06.2013 - 1 objects created 

我打算在google圖表API中使用此數據。你有沒有想法如何有效地獲得這些數據?

回答

17
items = Foo.objects.filter(createdate__lte=datetime.datetime.today(), createdate__gt=datetime.datetime.today()-datetime.timedelta(days=30)).\ 
    values('createdate').annotate(count=Count('id')) 

這將(1)過濾器的結果包含在過去的30天,(2)選擇只CREATEDATE字段,(3)計數的ID,由所有選定字段(即CREATEDATE)分組。這將返回格式的詞典列表:

[ 
    {'createdate': <datetime.date object>, 'count': <int>}, 
    {'createdate': <datetime.date object>, 'count': <int>}, 
    ... 
] 

編輯:

我不相信有辦法讓所有的日期,甚至包括那些count == 0,只有SQL。你必須通過python代碼插入每個缺失的日期,例如:

import datetime 

# needed to use .append() later on 
items = list(items) 

dates = [x.get('createdate') for x in items] 

for d in (datetime.datetime.today() - datetime.timedelta(days=x) for x in range(0,30)): 
    if d not in dates: 
     items.append({'createdate': d, 'count': 0}) 
+0

它是我一直在尋找的東西。不過,我也想包含日期,其中對象數是等於0.我該怎麼做? – dease

+0

@dease我更新了我的答案,以反映如何做到這一點。我還將原始代碼更改爲使用datefields而不是datetimefields。 – knbk

+0

以後如何訂購? –