2017-02-07 4 views
1

OrderItemに基づいてorder_totalを計算するプロパティを持つモデルOrderがあります。外部キーによってリンクされています。Djangoのモデルプロパティの合計を計算します

Order個のインスタンスの「order_total」プロパティの合計を計算したいと考えています。

これを行う方法はありますか?

class Order(models.Model): 
    customer = models.ForeignKey(Customer) 
    placed = models.DateField() 

    ... 

    def get_total_cost(self): 
     return sum(item.get_cost() for item in self.items.all()) 

    order_total = property(get_total_cost) 


class OrderItem(models.Model): 
    order = models.ForeignKey(Order, related_name="items") 
    product = models.ForeignKey(Product, related_name="order_items") 
    quantity = models.PositiveIntegerField(default=1) 

    ... 

    def get_cost(self): 
     return self.product.price * self.quantity 

これは私のクエリです:

このエラーを返します
>>> Order.objects.all().aggregate(Sum("order_total")) 

django.core.exceptions.FieldError: Cannot resolve keyword 'order_total' into field. Choices are: placed, customer, customer_id, id, items, paid 
+2

はこの答えを見て:http://stackoverflow.com/a/3066607/641249代わりにこれを試してみてください:https://docs.djangoproject.com/en/1.10/topics/db/aggregation/#aggregating-annotations – neverwalkaloner

答えて

1

あなたはのOrderItemからORDER_TOTALの外部キーの検索のために __二重のアンダースコアを使用する必要があります検索フィールドとしてのモデル:

odrerObj = OrderItem.objects.all().aggregate(sum_order = Sum("order__order_total")) 

しかし、あなたは注文 ojectのORDER_TOTAL財産の合計を必要とする場合、あなたはこのようなものを使用することができます。

order_list = Order.objects.all() 
sum = 0 
for item in order_list : 
    sum = sum + item.order_total() 

print sum 
+1

ありがとう、私はあなたの2番目のソリューションを使用して終了しました。 –