我有2个型号。 serviceinvoice和invoiceitems。 invoiceitems模型使用外键链接到serviceinvoice。
现在,对于单一发票,我如何获得总折扣金额。 Annotate不起作用,因为它仅适用于单行。 的 Models.py
class serviceinvoice(models.Model):
user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='invoice')
invoice_number=models.CharField(max_length=100)
invoice_date = models.DateField()
class serviceinvoiceitems(models.Model):
user=models.ForeignKey(settings.AUTH_USER_MODEL,related_name='serviceinvoiceitem')
company=models.ForeignKey(Organisation,related_name='sitemcomp')
invoice_number=models.ForeignKey(serviceinvoice,related_name='serviceitems1')
discount = models.BooleanField(default=False)
discount_amount = models.FloatField(null=True,blank=True,default=0)
Amount=models.FloatField()
discription=models.CharField(max_length=500,blank=True,null=True)
我正在努力寻找:
invoice_detailmain = serviceinvoice.objects.get(pk=pk)
dis_value_total = Sum('invoice_detailmain__serviceitems1__discount_amount')
它没有给出discount_amount的总和。 什么是解决方案以及如何在模板中显示它?
答案 0 :(得分:2)
使用反向关系:
IO.inspect
请注意,这是使用django ORM中的内置invoice_detailmain = serviceinvoice.objects.get(pk=pk)
dis_value_total = sum(i.discount_amount for i in invoice_detailmain.serviceinvoiceitems_set.all())
而不是sum
。
另一种方法是注释整个查询集,然后获取您的个人发票:
Sum
这是有效的,因为i = serviceinvoice.objects.annotate(Sum('serviceinvoiceitems__discount_amount')).get(pk=pk)
将返回另一个查询集,因此您可以将操作链接在一起。