質問
- Django の集計機能を使用して sumproduct を計算することは可能ですか?
バックグラウンド
複数のアイテムを含めることができる請求書をモデル化しています。Invoice モデルと Item モデルの間の多対多の関係は、InvoiceItem 中間テーブルを通じて処理されます。
請求書の合計金額 — <code>amount_invoiced — は、指定された請求書の各アイテムのunit_price
との積を合計することによって計算されます。以下は、これを達成するために現在使用しているコードですが、 Django の集計機能quantity
を使用してこれを処理するより良い方法があるかどうか疑問に思っていました。
現在のコード
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)