У меня отношение один ко многим.
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)
Я хочу сделать запрос, чтобы выбрать все строки в счете-фактуре и сумму цен всех элементов для каждого счета-фактуры, и получить к нему доступ через набор запросов
, например
, поэтому, если счет-фактура №1
содержит 2 товара
, каждый с qty = 2
и unit_price = 3
, счет №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'
ОБНОВЛЕНИЕ
Спасибо за вводные данные, я взял несколько очередей и в конце концов создал новый column unit_amount
, добавлено дополнительное действие к методу .save ()
, чтобы выполнить prod_qty * unit_price
и сохранить его в новом столбце.
, а затем сделали следующее:
inv_list = Invoice.objects.all()\
.annotate(amount=Sum('item__unit_amount')).order_by('-inv_date')