0

我是 Django 的新手。只想知道计算两个相关模型的某些数据的最佳方法是什么。我有一个OrderOrderLine模型,所以每次我添加一个新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个选项:

  1. 创建一个post_save信号,OrderLine其中将查询刚刚保存的订单中的所有项目OrderLineorder_id遍历每个项目,计算总数,然后将其分配给订单总数并更新它

  2. OrderLine只需在调用中创建一个方法,例如recalculate_total. 此方法将接收一个订单 ID,将遍历具有该 ID 的订单行,返回计算的总数。

有什么建议吗?

4

0 回答 0