Django queryset按时间间隔聚合

时间:2012-03-30 21:20:20

标签: django datetime django-queryset

您好我正在编写一个Django视图,它在客户端输出数据(High Charts)。数据是气候数据,每天记录一次给定参数。

我的疑问是:

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本身是否有一种方便的方法。

或者直接修改数据库并使用脚本从时间戳中填充月份和年份字段可能更好?

任何帮助都非常感激。

1 个答案:

答案 0 :(得分: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]