python - 使用 Django ORM 查询基于日期的值

标签 python django django-orm

我有一堆具有值和日期字段的对象:

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/

相关文章:

python - 根据文本版本控制删除重复项

python - RuntimeError : The reset parameter is False but there is no n_features_in_ attribute. 是否安装了这个估算器?

Django Admin : Getting a QuerySet filtered according to GET string, 与更改列表中看到的完全一样?

python - Django 上下文处理器和具有多个应用程序的 Django 项目

python - 查询没有命名直通字段的多对多关系

python - 如何清除 stringio 对象?

Python从不同文件导入不同结果

django - {% with %} 模板标签以避免多次执行查询?

python - Django 子查询先前记录的子集

python - 更改值查询集中的字典键