【问题标题】:Django: How to get SUM of all rows related to a single rowDjango:如何获取与单行相关的所有行的总和
【发布时间】:2017-05-11 09:10:59
【问题描述】:

我有 2 个模型。 serviceinvoice 和 invoiceitems。 invoiceitems 模型通过外键链接到 serviceinvoice。

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

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    使用反向关系:

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

    请注意,这是使用内置的 sum 而不是 django ORM 中的 Sum

    另一种方法是注释整个查询集,然后获取您的个人发票:

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

    这是可行的,因为annotate 将返回另一个查询集,因此您可以将这些操作链接在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 2019-09-14
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多