最初的回答:
我有一个简单的模型。我想基于同一模型中的某些字段(我们称其为分数)计算其一个字段的默认值。
我的理想方式是这样的:
另一种我搜索到的方法是覆盖类的inti。但根据django的说法,如果实现不正确可能会产生后果。
如何最简洁地实现此目标?如何设置字段的默认值,使其从同一模型的其他字段计算出来,以便稍后可以由用户更改?
我有一种预感
我有一个简单的模型。我想基于同一模型中的某些字段(我们称其为分数)计算其一个字段的默认值。
我的理想方式是这样的:
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()方法。问题是它会阻止用户进一步更改score字段。另一种我搜索到的方法是覆盖类的inti。但根据django的说法,如果实现不正确可能会产生后果。
如何最简洁地实现此目标?如何设置字段的默认值,使其从同一模型的其他字段计算出来,以便稍后可以由用户更改?
我有一种预感
classmethod
是正确的方法,但我还没有成功实现。
self
参数的可调用对象。default=...
应该是一个没有参数的可调用对象或者一个值。 - Willem Van Onsemdefault
来做那个。而是将计算添加到模型的save()
方法中。 - dirkgroten