首页 > 解决方案 > Django对外部属性求和

问题描述

我在 Django 中遇到了数据库和 sum 的问题。我有 3 个表:customer、order 和 orderLine。

对于报告,我想计算客户每个订单的所有行价格的总和。

class Customer(models.Model):
    firstName = models.CharField(max_length=200)
    lastName = models.CharField(max_length=200)
    mail = models.EmailField(max_length=100)
    etc...

    def get_count_of_orders(self):
        return self.orders.count()

    def get_sum_line_prince_of_all_orders(self):
        ???????????
        return (sum_of_all_line_prince_all_orders)


class Order(models.Model):
    orderNum = models.CharField(max_length=200)
    customer = models.ForeignKey(Customer, related_name="orders")
    globalAmount = models.DecimalField(max_digits=20, decimal_places=4)
    ...

class OrderLine(models.Model):
    order = models.ForeignKey(Order, related_name="ordersLines")
    linePrice = models.DecimalField(max_digits=20, decimal_places=4)
    ...

我不知道在 get_sum_of_orders 中设置什么以获得正确的结果。我已经处理了不同的东西,比如注释或聚合。但目前没有成功。

我暂时不明白这个过程。

你可以帮帮我吗?

标签: pythondjangoorm

解决方案


您可以通过以下方式访问所有订单:

self.orders.all()

您可以使用以下方法迭代它们:

sum = 0
for each_order in self.orders.all():
    sum += each_order.globalAmount
return sum

在这里,我假设 globalAmount 是您需要计算的金额。

如果您需要通过每个客户到达 OrderLine -> linePrice 并计算每个客户的 linePrice(s) 的总和,请尝试以下操作:

for each_order in self.orders.all():  #each order
    for each_OrderLine in each_order.ordersLines.all()
        sum += each_OrderLine.linePrice

或者你可以使用列表理解:

sum([myorder.linePrice for myorder in order.ordersLines.all() for order in self.orders.all()])

推荐阅读