0

我有一个简单的模型:

class Atividade(models.Model):
    valor_brl = models.DecimalField(max_digits=14, decimal_places=2)
    dolar_ref = models.DecimalField(max_digits=14, decimal_places=2)
    valor_usd = models.DecimalField(max_digits=14, decimal_places=2)

我在使用模型中的两个字段计算新值的方法之后创建

@property
def valor_usd_novo(self):
    valor_usd_novo = self.valor_brl / self.dolar_ref
    return valor_usd_novo

如果我打电话{{ valor_usd_novo }},我会得到我想要的结果。

在此之后,我创建了 save() 方法,将valor_usd_novo结果保存在valor_usd模型的字段中。

def save(self, *args, **kwargs):
    self.valor_usd = self.valor_usd_novo()
    super(Atividade, self).save(*args, **kwargs)

关键是,当我打电话时,valor_usd我没有得到任何结果,并且数据库不会使用valor_usd_novo方法的结果进行更新。

我在这里错过了什么?

4

2 回答 2

1

valod_usd_novo是 a property,因此您需要将其视为属性,而不是方法。因此,放弃调用并作为属性引用:

def save(self, *args, **kwargs):
    self.valor_usd = self.valor_usd_novo  # not self.valod_usd_novo()
于 2019-10-31T19:38:17.263 回答
0

我真的很感谢所有的帮助。我找到了问题的解决方案:

def new_value(self, *args, **kwargs):
    self.valor_usd = self.valor_usd_novo
    super(Atividade, self).save(*args, **kwargs)
    return self.valor_usd

当我{{atividade.new_value}}在模板中调用此代码时,我得到了新值和self.valor_usd更新中的值。

于 2019-11-21T18:01:11.123 回答