bas*_*sh- 5 django django-models
我有一对多的关系.
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)
Run Code Online (Sandbox Code Playgroud)
我想进行查询以选择Invoice中的所有行以及每张发票的所有项目的价格总和,并通过查询集访问它
例如,因此,如果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'
Run Code Online (Sandbox Code Playgroud)
UPDATE
感谢您的输入,我采取了一些队列,最后我创建了一个新列unit_amount
,为该.save()
方法添加了一个额外的操作prod_qty * unit_price
并将其保存到新列.
然后做了这个:
inv_list = Invoice.objects.all()\
.annotate(amount=Sum('item__unit_amount')).order_by('-inv_date')
Run Code Online (Sandbox Code Playgroud)
如果你这样做,select_related()
那么我认为你应该这样做.aggregate(sum=sum('unit_price'))
,对吗?似乎还是select_related()
太多了。
还会aggregate
给你一本字典{sum:value}
,所以订购似乎是一个错误?它是做什么用的?但不确定。:)
如果这不起作用,尝试一下不同的方法怎么样?
for invoice in Invoice.objects.all():
tmp = invoice.item_set.aggregate(sum=sum('unit_price'))
# do some stuff with sum
Run Code Online (Sandbox Code Playgroud)
因为我相信您想要的是每张发票的总和,而不是全局总和。试一试。
// 编辑:当然我忘记了数量。在这种情况下,红外代码更好。
归档时间: |
|
查看次数: |
3055 次 |
最近记录: |