2つのフィールドの合計を乗算して注釈を付ける 質問する

2つのフィールドの合計を乗算して注釈を付ける 質問する

例のために簡略化した 3 つのモデルがあります。

class Customer(models.Model):
    email = models.CharField(max_length=128)

class Order(models.Model):
    customer = models.ForeignKey(Customer)
    order_status = models.CharField(blank=True, max_length=256)

class Lineitem(models.Model):
    order = models.ForeignKey(Order)
    quantity = models.IntegerField(blank=True)
    price = models.DecimalField(max_digits=6, decimal_places=2)

顧客に問い合わせ(フィルターも使用)、顧客が支払った合計金額(つまり、(価格×数量)の合計)を注釈付けしたい。

私が試してみました:
Customer.objects.filter(something).annotate(total_spent=Sum(F('order__lineitem__quantity') * F('order__lineitem__price')))

Sum() は F() 式では使用できないようです。別の方法はありますか?

ベストアンサー1

今はこの答えは必要ないかもしれませんが、合計式、次のように を宣言する必要がありますoutput_field

Customer.objects.filter(something)
                .annotate(total_spent=Sum(
                    F('order__lineitem__quantity') * 
                    F('order__lineitem__price'),   
                    output_field=models.FloatField()
                ))

おすすめ記事