django聚合多天
Posted
技术标签:
【中文标题】django聚合多天【英文标题】:django aggregate for multiple days 【发布时间】:2015-11-01 03:45:48 【问题描述】:我有一个模型,它有两个属性:日期和长度以及其他不相关的属性。而且我需要在模板中显示每天的长度总和列表。
到目前为止,我使用的解决方案是每天循环并使用如下聚合创建总和列表:
for day in month:
sums.append(MyModel.objects.filter(date=date).aggregate(Sum('length')))
但由于数据库查找的数量,这对我来说似乎非常无效。难道没有更好的方法来做到这一点吗?喜欢缓存所有内容,然后在不接触数据库的情况下对其进行过滤?
【问题讨论】:
【参考方案1】:.values()
可用于按date
分组,因此您只能通过.annotate()
获得唯一 日期以及length
字段的总和:
>>> from django.db.models import Sum
>>> MyModel.objects.values('date').annotate(total_length=Sum('length'))
来自docs:
当.values() 子句用于约束结果集中返回的列时,评估注解的方法略有不同。不是为原始 QuerySet 中的每个结果返回带注释的结果,而是根据 .values() 子句中指定的字段的唯一组合对原始结果进行分组。
希望这会有所帮助。
【讨论】:
谢谢,这正是我想要的。 可以按这个机型外键的外键分组吗?我试图做values('first_fk__second_fk')
,但它仍然被first_fk
分开。以上是关于django聚合多天的主要内容,如果未能解决你的问题,请参考以下文章