2012-03-30 68 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