我有一堆具有值和日期字段的对象:
obj1 = Obj(date='2009-8-20', value=10)
obj2 = Obj(date='2009-8-21', value=15)
obj3 = Obj(date='2009-8-23', value=8)
我要返回:
[10, 15, 0, 8]
或者更好的是,截至该点的总和:
[10, 25, 25, 33]
我最好直接从数据库中获取这些数据,否则我可以使用 forloop 非常轻松地进行总计。
我正在使用 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):
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)]
这避免了每天运行单独的查询。
关于python - 使用 Django ORM 查询基于日期的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371280/