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 我有一个简单的模型,其中包含字段 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>