2012-03-30 102 views
3

嗨我正在寫一個Django視圖,它輸出用於在客戶端(高圖表)上繪製圖形的數據。數據是每天記錄一次給定參數的氣候數據。Django queryset按時間間隔聚合

我的查詢是這樣的:

format = '%Y-%m-%d' 
sd = datetime.datetime.strptime(startdate, format) 
ed = datetime.datetime.strptime(enddate, format) 

data = Climate.objects.filter(recorded_on__range = (sd, ed)).order_by('recorded_on') 

現在,隨着範圍增加數據集顯着變大,這不就圖(從速度變慢相當除外)呈現良好。

有沒有辦法將我的數據按時間段平均分組 - 特別是每個月的平均值或每年的平均值?

我意識到這裏提到這可以在SQL來完成:django aggregation to lower resolution using grouping by a date range

但我想知道是否有在Django本身的便捷方式。

或者是直接修改數據庫並使用腳本從時間戳填充月份和年份字段可能更好?

任何幫助非常感謝。

回答

3

您是否嘗試過使用django-qsstats-magic(https://github.com/kmike/django-qsstats-magic)?

這讓事情變得很容易圖表,這裏是他們的文件一個時間序列例如:

from django.contrib.auth.models import User 
import datetime, qsstats 

qs = User.objects.all() 
qss = qsstats.QuerySetStats(qs, 'date_joined') 

today = datetime.date.today() 
seven_days_ago = today - datetime.timedelta(days=7) 

time_series = qss.time_series(seven_days_ago, today) 
print 'New users in the last 7 days: %s' % [t[1] for t in time_series] 
+0

哼。看起來很有希望 - 我會看看。 – 2012-03-30 22:35:23

+0

這種類型的查詢甚至可以在正常的Django中使用嗎? – 2012-03-31 15:13:18

+0

是的,你可以通過使用User.objects.filter()。aggregate();請參閱官方文檔:https://docs.djangoproject.com/en/dev/topics/db/aggregation/ – BluesRockAddict 2012-03-31 17:53:49