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.

Aktueller Code
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)        

Antworten auf die Frage(1)

Ihre Antwort auf die Frage