Tôi có mối quan hệ một đến nhiều.trường mô hình django tổng hợp từ mối quan hệ khóa ngoài
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)
Tôi muốn thực hiện một truy vấn để chọn tất cả các hàng trong hóa đơn và tổng của các giá của tất cả các mặt hàng cho mỗi hóa đơn, và truy cập nó thông qua một queryset
ví dụ vì vậy nếu invoice #1
có 2 items
, mỗi qty=2
và unit_price=3
, invoice #1
sẽ phải amount 2x2x3 = $12
UPDATE:
Dưới đây là những gì tôi có cho đến nay nhưng nó mang lại cho tôi một traceback
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'
CẬP NHẬT
Cảm ơn các yếu tố đầu vào, tôi đã lấy một số hàng đợi và trong cuối cùng tôi đã tạo một cột mới unit_amount
, đã thêm một hành động bổ sung vào phương thức .save()
để làm prod_qty * unit_price
và lưu nó vào cột mới.
và sau đó đã làm điều này:
inv_list = Invoice.objects.all()\
.annotate(amount=Sum('item__unit_amount')).order_by('-inv_date')
Bạn có chắc chắn tất cả unit_price của bạn là int trong cơ sở dữ liệu của bạn? –