这是我的模特
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
有人知道怎么做吗?
答案 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