我是 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, max_digits=20, 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
所以我想到了2个选项:
创建一个
post_save信号,OrderLine其中将查询刚刚保存的订单中的所有项目OrderLine,order_id遍历每个项目,计算总数,然后将其分配给订单总数并更新它OrderLine只需在调用中创建一个方法,例如recalculate_total. 此方法将接收一个订单 ID,将遍历具有该 ID 的订单行,返回计算的总数。
有什么建议吗?