django:使用函数计算数据库中的每一行

django:使用函数计算数据库中的每一行,django,Django,我想计算每一行的“总计”,使用下面的代码,它只显示最后一行总计,而不是每一行总计 类别发票(models.Model): 日期=型号.DateField(默认值=时区.now) client=models.ForeignKey(client,on_delete=models.CASCADE) def总计(自身): items=self.invoiceitem\u set.all() 对于项目中的项目: 应付金额=(项目价格*项目数量) 返回轮(到期金额,2) 类InvoiceItem(model

我想计算每一行的“总计”,使用下面的代码,它只显示最后一行总计,而不是每一行总计

类别发票(models.Model):
日期=型号.DateField(默认值=时区.now)
client=models.ForeignKey(client,on_delete=models.CASCADE)
def总计(自身):
items=self.invoiceitem\u set.all()
对于项目中的项目:
应付金额=(项目价格*项目数量)
返回轮(到期金额,2)
类InvoiceItem(models.Model):
发票=models.ForeignKey('invoice',on_delete=models.CASCADE)
product=models.ForeignKey(产品,on_delete=models.CASCADE)
price=models.DecimalField(最大位数=20,小数位数=2)
数量=型号。小数字段(最大位数=20,小数位数=2)
{%用于object.invoiceitem_set.all%}
{{product.product}}
{{product.price}}
{{product.quantity}
{{object.total}
{%endfor%}

您可以尝试以下方法:

类别发票(models.Model):
日期=型号.DateField(默认值=时区.now)
client=models.ForeignKey(client,on_delete=models.CASCADE)
#每个发票的合计字段
总计=型号。小数字段(最大位数=20,小数位数=2,默认值=0)
类InvoiceItem(models.Model):
发票=models.ForeignKey('invoice',on_delete=models.CASCADE)
product=models.ForeignKey(产品,on_delete=models.CASCADE)
price=models.DecimalField(最大位数=20,小数位数=2)
数量=型号。小数字段(最大位数=20,小数位数=2)
#重写保存方法以更新每个新项目的发票总额
def保存(自身、*args、**kwargs):
self.invoice.total+=整数(self.price*self.quantity,2)
self.invoice.save()
super().save(*args,**kwargs)
{%用于object.invoiceitem_set.all%}
{{product.product}}
{{product.price}}
{{product.quantity}
{{product.invoice.total}
{%endfor%}