python - 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 中设置什么以获得正确的结果。我已经处理了不同的东西,比如注释或聚合。但目前没有成功。
我暂时不明白这个过程。
你可以帮帮我吗?
解决方案
您可以通过以下方式访问所有订单:
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()])
推荐阅读
- reactjs - 我需要在 handlesubmit 函数中显示反应材料 ui 确认对话框或甜蜜警报确认对话框
- skyfield - 如何使用 Skyfield 生成模拟轨道?
- python - Pyparsing - 从数字简单解析成列表
- c# - 在我的 ViewModel 中将 DataGridComboBoxCollumn 绑定到 IObservableCollection
- opengl - 为什么我们在 Opengl 中使用四边形?
- php - 表单 OneToMany 外键 null 违规
- python - 我想让我的文件成为可执行文件,但是除非它使用 python,否则它不会运行?
- xml - 文档 XML 末尾的额外内容
- rust - 将 `#![no_std]` 添加到库时,该库的用户是否有任何缺点或复杂性?
- javascript - React - 在渲染中更新内容的正确方法