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

时间:2020-05-06 10:58:19

标签: django sum django-queryset

使用DJANGO 我有一个简单的模型,该模型具有字段Customer_ID,Date,Product,Total_price。我想按日期按组显示它们,所以该日期的所有价格都按组显示 例如

28 April 2020
Crisps £1.20
Cheese £1.40

29 April 2020
Crisps £1.80
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 %}

效果很好,但只显示所有总数 我可以从上面的查询集中选择每条记录,然后将其放在我的相应列表旁边,还是可以通过另一种方式显示每组中我的价格总和 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

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

样本布局

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