【问题标题】:django aggregate for multiple daysdjango聚合多天
【发布时间】:2015-11-01 03:45:48
【问题描述】:

我有一个模型,它有两个属性:日期和长度以及其他不相关的属性。而且我需要在模板中显示每天的长度总和列表。

到目前为止,我使用的解决方案是每天循环并使用如下聚合创建总和列表:

for day in month:
    sums.append(MyModel.objects.filter(date=date).aggregate(Sum('length')))

但由于数据库查找的数量,这对我来说似乎非常无效。难道没有更好的方法来做到这一点吗?喜欢缓存所有内容,然后在不接触数据库的情况下对其进行过滤?

【问题讨论】:

    标签: django database performance aggregate


    【解决方案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分开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2010-12-20
    • 2018-06-16
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多