如何解决Django 计算相关模型的数据
我是 Django 的新手。只想知道计算两个相关模型的某些数据的最佳方法是什么。我有一个 Order
和 OrderLine
模型,所以每次我添加一个新的 OrderLine
项目时,我都想遍历该订单的所有 OrderLine
项目并重新计算其总数,并使用该总数更新 Order
模型。这是我的模型:
class Order(models.Model):
"""
Order model
"""
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
session_id = models.CharField(max_length=256)
subtotal = models.DecimalField(
decimal_places=2,max_digits=20,default=0.00)
total = models.DecimalField(decimal_places=2,default=0.00)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
def __str__(self):
return str(self.id)
class OrderLine(models.Model):
"""
OrderLine contains data related to the items added to an order
"""
order_id = models.ForeignKey(
Order,related_name='items',on_delete=models.DO_NOTHING)
product_id = models.ForeignKey(Product,on_delete=models.DO_NOTHING)
price = models.DecimalField(decimal_places=2,max_digits=20)
quantity = models.IntegerField()
total = models.DecimalField(decimal_places=2,max_digits=20)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
def __str__(self):
return self.order_id
所以我想到了两个选项:
-
在
post_save
中创建一个OrderLine
信号,它将查询OrderLine
中的所有项目,其中包含刚刚保存的订单的order_id
,遍历每个项目,计算总计,然后将其分配给订单总计并进行更新 -
只需在
OrderLine
中创建一个方法调用类似recalculate_total
的东西。此方法将接收一个订单 id,将遍历具有该 id 的订单行,返回计算出的总数。
有什么建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。