我的观点如下:
def traxio_advice(request):
calculation_list = Calculations.objects.select_related('customer').filter(user=request.user)
p = Paginator(calculation_list, 20)
page = request.GET.get('page')
try:
calculations = p.page(page)
except PageNotAnInteger:
calculations = p.page(1)
except EmptyPage:
calculations = p.page(p.num_pages)
context = {'calculations': calculations}
return render(request, 'master/archive.html', context)
因此,我得到了这个用户的所有计算。并且计算模型具有price field
,但价格独家增值税。它需要在数据库中存储独家增值税,但我需要显示包含增值税。
因此,有没有办法计算每次计算的价格?
archive.html
模板如下:
{% for calculation in calculations %}
<tr data-archive-row class="archive-row">
<td>
<span>{{ calculation.make }}</span><br>
<small >{{ calculation.model }}</small>
</td>
<td>
<span class="text-success text-semibold">
{{ calculation.purchase_price|floatformat:0|intcomma }}
</span>
<small class="text-muted">(incl. VAT)</small>
</td>
</tr>
{% endfor %}
因此,在模板中显示价格独家增值税。
我创建了一个将其转换为包含增值税的功能:
def price_incl_vat(price_excl_vat):
return (price_excl_vat * decimal.Decimal(settings.VAT_VALUE)).normalize()
有没有办法在视图中计算价格(调用函数),然后将其发送到模板,还是可以在模板中完成?
或者有更好的方法吗?
提前致谢。
答案 0 :(得分:2)
你问
还是可以在模板中完成?
是的,您可以创建custom template filter。在yourapp / templatetags / yourapp_tags.py
import decimal
from django import template
from django.conf import settings
register = template.Library()
# add VAT
@register.filter(name='add_vat')
def add_vat(price_excl_vat):
return price_excl_vat * decimal.Decimal(settings.VAT_VALUE)).normalize()
然后在模板中
{% load myapp_tags %}
{% for calculation in calculations %}
{{ calculation.purchase_price|add_vat }}
{% endfor %}
或者,如果您希望这更多&#39;更多&#39;服务器端(模板过滤器仍然在我猜想的python代码中定义)你可以在模型上添加一个方法,以便它可以在更多的地方使用。
class Calculation(models.Model):
# more stuff here
@property
def price_including_vat(self):
return self.purchase_price * decimal.Decimal(settings.VAT_VALUE)).normalise()
然后它可以在任何地方使用,包括在calculation.price_including_vat
模板中。
答案 1 :(得分:1)
您可以将price_incl_vat
函数作为方法添加到模型中:
class Calculations(models.Model):
# ... fields here ...
def price_incl_vat(self):
return (self.purchase_price * decimal.Decimal(settings.VAT_VALUE)).normalize()
然后您可以在模板中调用该方法:
<span>{{ calculation.price_incl_vat|intcomma }}</span>