2016-12-27 72 views
1

我有2个模型。 serviceinvoice和invoiceitems。 invoiceitems模型通过外键链接到serviceinvoice。Django:如何获得有关单行的所有行的总和

现在对于单张发票,我如何获得总折扣金额? 注释不起作用,因为它仅适用于单行。 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的总和。 什么是解决方案以及如何在模板中显示它?

回答

2

使用反向关系:这是使用从Django的ORM内置sum而不是Sum

invoice_detailmain = serviceinvoice.objects.get(pk=pk) 
dis_value_total = sum(i.discount_amount for i in invoice_detailmain.serviceinvoiceitems_set.all()) 

注意。

的另一种方式做到这一点,是注释整个查询集,然后获取你的个人发票:

i = serviceinvoice.objects.annotate(Sum('serviceinvoiceitems__discount_amount')).get(pk=pk) 

这工作,因为annotate将返回另一查询集,所以你可以链运作起来。

相关问题