“计算”变量作为Django mod中的字段

2024-06-24 12:14:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的模型:

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方法的结果进行更新

我错过了什么


Tags: 方法模型selfmodelssavemaxvalorusd
2条回答

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

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更新中的值

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

def save(self, *args, **kwargs):
    self.valor_usd = self.valor_usd_novo  # not self.valod_usd_novo()

相关问题 更多 >