【问题标题】:Aggregating data (days) in template在模板中聚合数据(天)
【发布时间】:2015-09-24 09:19:09
【问题描述】:

我想分别汇总每天的项目数量。

型号:

class Bill(models.Model):
    date = models.DateTimeField()
    amount = models.IntegerField(null=False, blank=False)

模板:

   {% with var=bill.date|date:"Y-m-d" %}
      {{ var }}   #dict?
   {% endwith %}

我认为,将日期作为键添加到字典中,并将项目数量作为值是一个好主意,所以我写了它:

Dict[var] += bill.amount

如何在 Django 模板中使用它?

我走对了吗?也许其他解决方案更好?

【问题讨论】:

  • 嘿,我看到了您已删除的评论。我刚刚添加了示例。您可以通过在 stackoverflow 上搜索/搜索找到它们。

标签: python django


【解决方案1】:

使用aggregation/annotate 获取sum of amount by date。在模板中,只需像通常使用查询集一样打印其值。

1.如果您的日期时间具有相同的值(小时、分钟和秒),您应该能够使用以下内容。

bills = Bill.objects.values('date').annotate(Sum('amount'))

在模板中使用

{% for bill in bills %}
    {{ bill.date }} - {{ bill.sum__amount }}
{% endfor %}

2。如果您有不同小时的日期时间,并且您想按日期分组并打印其总和:

bills = Bill.objects.extra(select={'day': 'date( date )'})\
                    .values('day').annotate(Sum('amount'))

然后打印出来:

{% for bill in bills %}
    {{ bill.day }} - {{ bill.sum__amount }}
{% endfor %}

3.如果你想在模板中做计算,我强烈不推荐,看看regroup

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 2015-01-08
    • 2021-09-03
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多