Edw*_*man 6 python django django-models models
我有一个模型Order,它有一个order_total基于OrderItem外键链接的 s计算 a 的属性。
我想计算多个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
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
>>> Order.objects.all().aggregate(Sum("order_total"))
Run Code Online (Sandbox Code Playgroud)
返回此错误:
django.core.exceptions.FieldError: Cannot resolve keyword 'order_total' into field. Choices are: placed, customer, customer_id, id, items, paid
Run Code Online (Sandbox Code Playgroud)
您需要使用双下划线__对OrderItem模型中的 order_total 进行外键查找,以order作为查找字段:
odrerObj = OrderItem.objects.all().aggregate(sum_order = Sum("order__order_total"))
Run Code Online (Sandbox Code Playgroud)
但是如果你需要Order对象的 order_total 属性的总和,你可以使用这样的东西:
order_list = Order.objects.all()
sum = 0
for item in order_list :
sum = sum + item.order_total()
print sum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |