我的模型中包含以下字段:
options.then(res => res.json()).then(result => {
console.log(result);
resolve(result);
})
但是增值税金额是class Materiale(models.Model):
quantity=models.DecimalField(max_digits=5, decimal_places=2, default=0)
price=models.DecimalField( max_digits=5, decimal_places=2, default=0)
VAT=models.DecimalField(max_digits=5, decimal_places=2, default=0)
VAT_amount=models.DecimalField(max_digits=5, decimal_places=2, default=0)
的结果。
如何在我的数据库中自动存储该值???字段(VAT_amount)为 存在于数据库中。
谢谢。
答案 0 :(得分:1)
请不要将其存储在数据库中。如果它完全取决于其他字段,那么计算列通常会更好。确实,假设您 update 其中一个字段,那么您还需要更新VAT_amount
。但是,如果您进行了大量的查看,查询等操作,那么最终您可能会犯错并忘记更新。
您可以删除VAT_amount
字段,然后删除.annotate(..)
您的查询集以包含VAT_amount
,例如:
from django.db.models import F
Materiale.objects.annotate(VAT_amount=F('quantity')*F('price')*F('vat'))
由 this 查询集产生的Materiale
对象将具有一个额外的属性.VAT_amount
,其中包含公式的结果。
如果经常需要此功能,可以将其添加到该模型的管理器中,这样每次访问Materiale.objects
时该操作都会自动完成:
class MetarialeManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).annotate(
VAT_amount=F('quantity')*F('price')*F('vat')
)
class Materiale(models.Model):
quantity=models.DecimalField(max_digits=5, decimal_places=2, default=0)
price=models.DecimalField( max_digits=5, decimal_places=2, default=0)
VAT=models.DecimalField(max_digits=5, decimal_places=2, default=0)
objects = MaterialeManager()