在 Django 中记录总价值
Record Total Value in Django
记录一个计算字段的值真的不保存计算效率更高吗?
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)
似乎没有任何充分的理由在此处预先计算该字段。将一个现有值乘以另一个是一个简单的操作,在保存时计算它没有任何好处。
如果要计算的值涉及很多复杂且昂贵的操作,例如查询多个表或调用外部 API。
记录一个计算字段的值真的不保存计算效率更高吗?
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)
似乎没有任何充分的理由在此处预先计算该字段。将一个现有值乘以另一个是一个简单的操作,在保存时计算它没有任何好处。
如果要计算的值涉及很多复杂且昂贵的操作,例如查询多个表或调用外部 API。