在Django模型中,我可以获取一个字段的值,对其进行处理并将其存储在另一个字段中吗?

时间:2019-11-20 20:33:44

标签: django django-models

我想在另一个字段中引用一个字段的值。
我已经尝试过default=self.key_name * 2,但这是行不通的。

class Pizza_size(models.Model):
    length = models.DecimalField(decimal_places=2, default=0)
    price = models.DecimalField(decimal_places=2, default=self.length*2)

当我使用Pizza_size类创建对象时,如果length的值为5,我希望仅通过运行命令Pizza_size(length=5)将price的值为10。

1 个答案:

答案 0 :(得分:1)

根据the docs,“重写内置方法的经典用例是,如果您希望在保存对象时发生某些事情。”

鉴于您似乎要完成的工作,处理此问题的正确方法是覆盖模型的save方法。

这是一个例子:

class Pizza_size(models.Model):
    length = models.DecimalField(decimal_places=2, default=0)
    price = models.DecimalField(decimal_places=2, default=0)

    def save(self, *args, **kwargs):
        self.price = self.length*2
        super(MyModel, self).save(*args, **kwargs)

另一种选择是使用pre_save信号,但这并不像上面那样简单或标准。