基于日期w / Django ORM查询值 [英] query for values based on date w/ Django ORM
问题描述
我有一堆具有值和日期字段的对象:
obj1 = Obj(date ='2009 -8-20',value = 10)
obj2 = Obj(date ='2009-8-21',value = 15)
obj3 = Obj(date ='2009-8-23'值= 8)
我想要返回:
[10,15,0,8]
或更好,总共到达这一点:
[10,25,25,33]
我最好直接从数据库获取此数据,但否则我可以很容易地使用for / p>
我正在使用Django的ORM和Postgres
编辑:
只是要注意,我的例子只涵盖了几天,但在实践中,我有几百个对象覆盖了几十年...我正在做的是创建一个线图,显示所有对象的总和随着时间的推移而增长(很长一段时间)
这个没有测试,因为设置一个Django表来测试是有点太痛苦:
from datetime import date,timedelta
#http://www.ianlewis.org/en/python-date-range-iterator
def datetimeRange(from_date,to_date = None):
而to_date是None或from_date< = to_date:
yield from_date
from_date = from_date + timedelta(days = 1)
start = date(2009,8,20)
end = date(2009,8,23)
objects = Obj.objects.filter(date__gte = start)
objects = objects。过滤器(date__lte = end)
结果= {}
对象中的o:
结果[o.date] = o.value
返回[date.get(day,0)for day in datetimeRange(start,end)]
每天运行一个单独的查询。
I have a bunch of objects that have a value and a date field:
obj1 = Obj(date='2009-8-20', value=10)
obj2 = Obj(date='2009-8-21', value=15)
obj3 = Obj(date='2009-8-23', value=8)
I want this returned:
[10, 15, 0, 8]
or better yet, an aggregate of the total up to that point:
[10, 25, 25, 33]
I would be best to get this data directly from the database, but otherwise I can do the totaling pretty easily with a forloop.
I'm using Django's ORM and also Postgres
edit:
Just to note, that my example only covers a few days, but in practice, I have hundreds of objects covering a couple decades... What I'm trying to do is create a line graph showing how the sum of all my objects has grown over time (a very long time)
This one isn't tested, since it's a bit too much of a pain to set up a Django table to test with:
from datetime import date, timedelta
# http://www.ianlewis.org/en/python-date-range-iterator
def datetimeRange(from_date, to_date=None):
while to_date is None or from_date <= to_date:
yield from_date
from_date = from_date + timedelta(days = 1)
start = date(2009, 8, 20)
end = date(2009, 8, 23)
objects = Obj.objects.filter(date__gte=start)
objects = objects.filter(date__lte=end)
results = {}
for o in objects:
results[o.date] = o.value
return [results.get(day, 0) for day in datetimeRange(start, end)]
This avoids running a separate query for every day.
这篇关于基于日期w / Django ORM查询值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!