在Django中转换数据。希望能够将总和应用于十进制字段

时间:2010-12-10 14:31:09

标签: mysql django views sum models

我有这样的模特。

#models.py
class Payment(models.Model):
    unit_price = models.DecimalField(max_digits=12, decimal_places=2)
    discount = models.DecimalField(max_digits=12, decimal_places=2)
    payment_terms = models.CharField(max_length=80)
    amount = models.DecimalField(max_digits=12, decimal_places=2)
    VAT = models.DecimalField(max_digits=4, decimal_places=2)

    def __unicode__(self):
        return unicode(self.unit_price)

class Invoice(models.Model):
    client = models.ForeignKey(Client)
    payment = models.ForeignKey(Payment)
    date = models.DateField()
    invoice_no = models.CharField(max_length=16)
    work_orders = models.ManyToManyField(Work_Order)
    contract_info = models.ForeignKey(Contract_Info)

    def __unicode__(self):
                return self.invoice_no

我想关注的是支付,所以试着忘记其他一切。这是我的views.py。

#views.py
@login_required 
def invoice_details(request, id=1):
    invoices_list = Invoice.objects.filter(pk=id)
    invoice = get_object_or_404(Invoice, pk=id)
    client = invoices_list[0].client
    work_orders = invoices_list[0].work_orders
    payment = invoices_list[0].payment

    return render_to_response(('invoice_details.html', locals()), {'work_orders': work_orders,'payment':payment,'client': client, 'invoice': invoice ,'invoices_list': invoices_list}, context_instance=RequestContext(request))

这是我的模板。

<h1>invoice_details.html<h1>
{{ payment.amount }}

模板以小数值显示付款金额。我希望能够做的是{{payment.amount}}的一些总和。假设我想要乘以值的任何值 {{payment.amount}}让我们说2.我该怎么做?

3 个答案:

答案 0 :(得分:0)

我会在视图中执行此操作,

new_amount = paymount.amount * 2
return render_to_response(('invoice_details.html', locals()), {'work_orders': work_orders,'payment':payment,'client': client, 'invoice': invoice ,'invoices_list': invoices_list, 'new_amount':new_amount}, context_instance=RequestContext(request))

但如果有某种原因你不能或不想,你可以使用模板标签在模板中实现类似的东西。我不认为有一个乘法标记,但有一个补充:

{{ payment.amount|add:"2" }}

只需在付款金额上加2,类似

{{ payment.amount|add:payment.amount }}

将显示的值加倍。添加可能不是您想要做的,因此您可以尝试使用自己的模板标记来使用乘法或您想要的任何函数,请参阅http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

答案 1 :(得分:0)

我不知道为什么你需要在模板中完成,而不是在视图中,但这是我的解决方案。有一个long discussion about arithmetic in Django templates关于不支持此功能,特别是您描述的用例。

如果您仍想继续,这可能会有所帮助。在Django文档中,有|add built-in template filter似乎是一种原始形式的算术。很遗憾,没有|multiply过滤器。您可以在Django安装下的template/defaultfilters.py中找到过滤器。

复制它,改变你需要的东西,使它成为产品而不是总和。完成后,您可能希望将其提交给Django项目,以使其在未来版本中成为可能。

答案 2 :(得分:0)

以下是答案:

#views.py
subtotal = payment.amount * 2
return render_to_response(('invoice_details.html', locals()), {'work_orders': work_orders,'payment':payment,'client': client, 'invoice': invoice ,'invoices_list': invoices_list, 'subtotal':subtotal}, context_instance=RequestContext(request))

在模板中放置此自定义标记(我认为它是什么)来表示值。

{{ subtotal }}