我有一对多的关系。
class Invoice(models.Model):
stuff
class Item(models.Model):
invoice = models.ForeignKey(Invoice)
qty = models.IntegerField()
unit_price = models.DecimalField(max_digits=4, decimal_places=2)
我想查询以选择发票中的所有行以及每张发票的所有项目的价格总和,并通过查询集访问它
例如
所以如果
invoice #1
有 2 items
, 每个都带有 qty=2
和 unit_price=3
, invoice #1
会有 amount 2x2x3 = $12
更新:
这是我到目前为止所拥有的,但它给了我一个追溯
inv_list = \
Invoice.objects.select_related().all()\
.aggregate(sum=sum('item__unit_price')).order_by('-inv_date')
TypeError at /site/invoice/
unsupported operand type(s) for +: 'int' and 'str'
更新
感谢您的输入,我参加了一些队列,最后我创建了一个新专栏
unit_amount
, 为 .save()
添加了一个额外的操作方法做prod_qty * unit_price
并将其保存到新列。然后这样做:
inv_list = Invoice.objects.all()\
.annotate(amount=Sum('item__unit_amount')).order_by('-inv_date')
最佳答案
for invoice in Invoice.objects.all():
ammount = 0
for item in invoice.item_set.all():
ammount += item.qty * item.unit_price
print invoice.pk, ammount
关于django 模型从外键关系求和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725861/