2012-03-30 18 views
3

こんにちは私はクライアント側(High Charts)のグラフ作成のためのデータを出力するDjangoビューを作成しています。データは、1日に1回記録された所定のパラメータを有する気候データである。時間間隔でDjangoクエリーセット集約

私のクエリはこれです:

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

しかし、私はジャンゴ自体に便利な方法があるかどうかを知りたいです。

または、dbを直接変更し、スクリプトを使用してタイムスタンプから月と年のフィールドを設定する方が良いでしょうか?

ご迷惑をおかけして申し訳ございません。

答えて

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

うーん。有望に見えます - 私は見ています。 –

+0

通常のDjangoでもこのタイプのクエリは可能ですか? –

+0

はい、User.objects.filter()。aggregate();を使用すると、同様の結果が得られます。次の公式の文書を参照してください:https://docs.djangoproject.com/en/dev/topics/db/aggregation/ – BluesRockAddict