计算Django

时间:2017-02-07 12:00:29

标签: python django django-models models

我有一个模型Order,它有一个属性,可以根据外键链接的order_total来计算OrderItem

我想计算一些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

1 个答案:

答案 0 :(得分:1)

您需要使用双下划线 __ 对来自 OrderItem 模型的order_total进行外键查找,并使用 order 作为查找字段:

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

但如果您需要订单对象的order_total属性的总和,您可以使用以下内容:

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

print sum