Tengo una relación de uno a muchos.campo de suma de modelos django de la relación de clave externa
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)
Quiero hacer una consulta para seleccionar todas las filas de la factura y la suma del precio de todos los artículos para cada factura, y acceder a ella a través de un conjunto de consultas
por ejemplo, así que si invoice #1
tiene 2 items
, cada uno con qty=2
y unit_price=3
, invoice #1
tendría amount 2x2x3 = $12
ACTUALIZACIÓN:
Aquí es lo que tengo hasta ahora, pero me da un rastreo
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'
ACTUALIZACIÓN
Gracias por las entradas, tomé algunas colas y en el Al final, creé una nueva columna unit_amount
, agregué una acción adicional al método .save()
para hacer prod_qty * unit_price
y la guardé en la nueva columna.
y luego hicieron esto:
inv_list = Invoice.objects.all()\
.annotate(amount=Sum('item__unit_amount')).order_by('-inv_date')
¿Seguro toda su UNIT_PRICE está int en su base de datos? –