Django - 我如何计算查询集中字段的总和

Django - How do i calculate the sum of a field in a queryset

使用 DJANGO 我有一个简单的模型,其中包含字段 Customer_ID、日期、产品、Total_price。我想按日期分组显示它们,以便该日期的所有价格都显示为分组 例如

28 April 2020<br> Crisps £1.20<br> Cheese £1.40

29 April 2020<br> Crisps £1.80<br> Cheese £3.40

然后如何显示每个日期的总价(例如 £2.60、£5.20) 这是我在我的 html 中尝试过的方法,所有这些都很好地分组显示,但用于计算总和的最后一个标签不起作用:

{% regroup results by Date as new_list %}
    {% for Date, results2 in new_list %}
        <div class="track-row">
            <span class="track-item track1">{{ Date }}</span>
               {% for data in results2 %}
                   <div>
                        <span class="track-item track3">{{ data.Stock }}</span>
                        <span class="track-item track5">£{{ data.Sell_price }}+vat</span>
                        <span class="track-item track4">{{ data.Quantity }}</span>
                        <span class="track-item track5">£{{ data.Total_price }}+vat</span>
                    </div>
               {% endfor %}
               <h6 class="title4">£{{ data.Total_price__sum }} + vat</h6>
        </div>
    {% endfor %}

在我的 views.py 中,我创建了一个包含所有总计的查询集:

total = Quotes.objects.values('Customer_ID', 'Date').filter(Customer_ID=customer_id).\
    annotate(total_price=Sum('Total_price')).order_by('-Date')

这很好用并给出了正确的总数,但是我如何在 html.

旁边显示这些结果

我试过了:

       {% for data2 in total %}
           <h6 class="title4">£{{ data2.total_price }} + vat</h6>
       {% endfor %}

效果很好,但只显示所有总数 我可以 select 来自上述查询集的每条记录并将其放在我相应列表的旁边,还是有另一种方法来显示我在每个组中的价格总和 非常感谢任何帮助

一种方法是实现一个简单的自定义过滤器,该过滤器将列表作为参数并 returns 总和。

布局示例

myapp/
    __init__.py
    models.py
    templatetags/
        __init__.py
        myapp_extras.py
    views.py

myapp_extras.py

from django import template

register = template.Library()

@register.filter(is_safe=True)
def sum_total_price(value):
    sum = 0
    for v in value:
        sum += v.Total_price
    return sum

然后在模板中,首先加载过滤器,

{% load myapp_extras %}

终于用上了,

<h6 class="title4">£{{ result2|sum_total_price }} + vat</h6>

Django Docs - Custom template tags and filters