【发布时间】:2019-08-05 11:34:53
【问题描述】:
我有一个简单的模型。我想根据同一模型的一些字段计算其字段之一的默认值(我们称之为分数):
我理想的做法是这样的:
class ModelA(models.model):
field_1 = models.IntegerField()
field_1 = models.IntegerField()
score = models.IntegerField(default=self.calculate_default())
def calculate_default(self):
default = (self.field_1 + self.field_2) / 2
return default
问题:calculate_default 方法无权访问self。 我尝试过的一种解决方案是覆盖 save() 方法。问题是它会阻止用户进一步更改分数字段。
我搜索的另一种方法是覆盖类的 inti。但是根据 django 的说法,如果没有正确实施,它可能会产生后果。
实现这一目标的最简洁方法是什么?如何设置从相同模型的其他字段计算的字段的默认值,以便用户稍后更改?
我有一种预感,classmethod 是要走的路,但我还没有成功。
【问题讨论】:
-
默认值不能是采用
self的可调用对象。default=...是不带参数或值的可调用对象。 -
不要为此使用
default。而是将计算添加到模型的save()方法中。