Python Django:如何通过Model方法设置默认字段值
我有一个简单的模型。我想根据同一型号的一些字段计算其中一个字段的默认值(我们称之为分数): 我的理想方法是:Python Django:如何通过Model方法设置默认字段值,python,django,Python,Django,我有一个简单的模型。我想根据同一型号的一些字段计算其中一个字段的默认值(我们称之为分数): 我的理想方法是: class ModelA(models.model): field_1 = models.IntegerField() field_1 = models.IntegerField() score = models.IntegerField(default=self.calculate_default()) def calculate_default(se
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\u默认方法无法访问self。
我尝试的一个解决方案是重写save()方法。问题是它阻止用户进一步更改分数字段
我搜索的另一个方法是重写类的inti。但据django称,如果不正确实施,可能会产生后果
实现这一目标最干净的方法是什么?如何设置要从同一型号的其他字段计算的字段的默认值,以便用户稍后更改
我有一种预感,classmethod
是一条路要走,但我还没能成功
calculate_默认方法无权访问self。我尝试的一个解决方案是重写save()方法。问题是它阻止用户进一步更改分数字段
实际上,这是正确的方法。但如果score的值为空或不为空,则可以在save()
方法中进行检查:
def save(self, *args, **kwargs):
if self.score == None:
self.score = self.calculate_default()
super().save(*args, **kwargs)
仅供参考,在
classmethod
中,您无法访问self
或ModelA
对象。如果要使用的类方法不依赖于ModelA
字段的当前实例或完全独立的值(例如:当前日期datetime.now
),则可以使用该方法。默认值不能是采用self
的可调用值。default=…
是一个不带参数或值的可调用函数。不要为此使用default
。将计算添加到模型的save()
方法中。这似乎是合理的,但对我来说不起作用。原因:您的示例中有一个输入错误:“scrore”->score。现在起作用了。