如何在Django模型中执行乘法?

时间:2018-11-01 09:00:29

标签: django django-models

这是我的模特

class Purchase(models.Model):
    Quantity    = models.PositiveIntegerField()
    rate        = models.DecimalField(max_digits=5,decimal_places=2)
    Amount      = models.DecimalField(max_digits=5,decimal_places=2)

我想在“数量”和“费率”之间进行乘法,并将结果存储在“金额...”中。

所以我做了这样的事情:

from django.db.models import F

@receiver(pre_save, sender=Purchase)
def update_amount(sender,instance,*args,**kwargs):
    totalamount = Purchase.objects.get(F('rate') * F('Quantity'))
    instance.Amount = totalamount

但是它给了我这个错误:

'CombinedExpression' object is not iterable

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

但是这里您已经拥有实例,因此totalamount很简单:

@receiver(pre_save, sender=Purchase)
def update_amount(sender, instance, *args, **kwargs):
    instance.Amount = instance.rate * instance.Quantity

话虽如此,如果Amount总是 rate乘以Quantity,最好定义一个@property,从那时起,您避免数据重复,例如:

class Purchase(models.Model):

    Quantity    = models.PositiveIntegerField()
    rate        = models.DecimalField(max_digits=5,decimal_places=2)

    def amount(self):
        return self.Quantity * self.rate