Python 外部属性上的Django和

Python 外部属性上的Django和,python,django,orm,Python,Django,Orm,我对Django中的数据库和sum有问题。 我有3张表:客户、订单和订单行 对于报告,我想计算客户每个订单的所有行价格之和 class Customer(models.Model): firstName = models.CharField(max_length=200) lastName = models.CharField(max_length=200) mail = models.EmailField(max_length=100) etc...

我对Django中的数据库和sum有问题。 我有3张表:客户、订单和订单行

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

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)
    ...
我不知道应该设置什么来获得正确的结果。 我尝试过不同的东西,比如注释或聚合。 但目前没有成功

我当时不理解这个过程


您能帮助我吗?

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

self.orders.all()
您可以使用以下方法进行迭代:

sum = 0
for each_order in self.orders.all():
    sum += each_order.globalAmount
return sum
这里我假设globalAmount是您需要计算的金额

如果需要通过每个客户访问OrderLine->linePrice并计算每个客户的linePrice之和,请尝试以下操作:

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()])

订单行
如何与
客户
相关?似乎没有
ForeignKey
/。。。从
订单
订单行
,只有到
项目
。订单和订单行是相关的。较旧的订单行有一个主键来进行链接。是的,但在您当前的型号中,这两个主键之间没有任何关系(
外键
OneToOneField
ManyToManyField
,等等)我没有把所有的课程都抄下来。但是这三个课程是链接的。你好,谢谢你的回答。有两个循环将需要大量的CPU不是吗?有没有办法直接从SQL中获取结果?是的,应该有办法,但我对SQL不熟悉。此外,使用列表理解而不是for循环,因为它更快:。