如何计算Django模型字段

时间:2020-04-22 20:30:27

标签: jquery django django-models django-rest-framework django-views

我的模型中包含以下字段:

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)为 存在于数据库中。

谢谢。

1 个答案:

答案 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()