在Django中记录总值

时间:2015-05-28 20:34:26

标签: django django-models

记录计算字段的值在不保存的情况下计算真的更有效吗?

class SaleDetail(models.Model):
    product = models.ForeignKey(Product)
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=8, decimal_places=2)
    subtotal = models.DecimalField(max_digits=8, decimal_places=2)

    def save(self, *args, **kwargs):
        self.subtotal = self.price * self.quantity
        super(SaleDetail, self).save(*args, **kwargs)

Calculated field

class SaleDetail(models.Model):
    product = models.ForeignKey(Product)
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=8, decimal_places=2)

    def get_total_value(self):
        if self.quantity:
            return self.price * self.quantity

    total_value = property(get_total_value)

1 个答案:

答案 0 :(得分:1)

在这里预先计算这个领域似乎没有什么好的理由。将一个现有值乘以另一个值是一个简单的操作,通过在保存时计算它没有任何好处。

如果要计算的值涉及大量复杂且昂贵的操作(例如查询多个表或调用外部API),那么只会有一些好处。