Python 外部属性上的Django和
我对Django中的数据库和sum有问题。 我有3张表:客户、订单和订单行 对于报告,我想计算客户每个订单的所有行价格之和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...
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循环,因为它更快:。