2016-05-28 3 views
0

金額のあるレコードのコレクションを返すクエリーセットがあります。毎日の平均でグラフを表示したいと思います。これは私のコードですが、パフォーマンスに関しては本当にひどいと思います。 これを改善するためのアドバイスはありますか?図表のクエリーセットでの離散日数と平均値

month_query = table.objects.filter(time__gt=datetime.now() - timedelta(30)) 
for day in range(1, 32): 
     cnt = 0 
     amount = 0 
     amount_avg = 0 
     for obj in month_query: 
      if obj.time.day == day: 
       amount += obj.amount 
       cnt += 1 
     if cnt > 0: 
      amount_avg = amount/cnt 
     month_days_avg.insert(day, amount_avg) 

答えて

0

あなたはそれを行うにはジャンゴをできるようにvaluesannotateを使用することができます。

from django.db.models import Avg 
month_days_avg = MyModel.objects.filter(time__gt=datetime.now() - timedelta(30)).values('time').annotate(average_amount=Avg('amount')) 

上記のクエリは、このように日付と平均値

+0

のリストをなり、私はただで一つの変数を取得しますすべての時間avarageは毎日avarageではない? – N3TC4t

関連する問題