python - 计算 Django 中模型属性的总和

标签 python django django-models models

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

我想计算多个 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

最佳答案

您需要使用双下划线__OrderItem模型中以order作为查找字段来查找order_total的外键:

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

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

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

print total

关于python - 计算 Django 中模型属性的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42089357/

相关文章:

python - 在Python中将UTC字符串转换为本地日期时间字符串?

Python:如何打印列表,其中包含列表中每个项目的标签

Python:通过套接字发送的消息大小

python - 具有 ManyToManyField 的模型

django - 如何通过Django Class模型自动更新日期字段

python - 如何在 keras 神经网络中进行简单的数据记忆

python - 将日期/时间保存在模型 Django 的列表中

python - 无法从我的数据库访问某些信息与 django 的多对多关系

Django migrate --fake 和 --fake-initial 解释

django - 在 Django 用户记录中存储 unicode first_name 和 last_name