在模板中聚合数据(天)

时间:2015-09-24 09:19:09

标签: python django

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

型号:

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模板中使用它?

我是正确的吗?也许其他解决方案更好?

1 个答案:

答案 0 :(得分:0)

使用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