Summenprodukt mit Djangos Aggregation
FrageIst es möglich mitDjangos Aggregationsfähigkeiten man ein Summenprodukt berechnet?Hintergrund
Ich modelliere eine Rechnung, die mehrere Artikel enthalten kann. Die Viele-zu-Viele-Beziehung zwischen dem Invoice- und dem Item-Modell wird über die InvoiceItem-Zwischentabelle abgewickelt.
Der Gesamtbetrag der Rechnung -amount_invoiced
- wird berechnet durch Summieren des Produkts vonunit_price
undquantity
für jeden Artikel auf einer bestimmten Rechnung. Unten ist der Code aufgeführt, den ich derzeit verwende, aber ich habe mich gefragt, ob es eine bessere Möglichkeit gibt, mit diesem Code umzugehenDjangos Aggregationsfähigkeiten.
class Item(models.Model):
item_num = models.SlugField(unique=True)
description = models.CharField(blank=True, max_length=100)
class InvoiceItem(models.Model):
item = models.ForeignKey(Item)
invoice = models.ForeignKey('Invoice')
unit_price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.DecimalField(max_digits=10, decimal_places=4)
class Invoice(models.Model):
invoice_num = models.SlugField(max_length=25)
invoice_items = models.ManyToManyField(Item,through='InvoiceItem')
def _get_amount_invoiced(self):
invoice_items = self.invoiceitem_set.all()
amount_invoiced = 0
for invoice_item in invoice_items:
amount_invoiced += (invoice_item.unit_price *
invoice_item.quantity)
return amount_invoiced
amount_invoiced = property(_get_amount_invoiced)