繁体   English   中英

Django:如何通过模型方法设置默认字段值

[英]Django: How to Set Default Field Value By Model Method

我有一个简单的模型。 我想根据同一模型的某些字段计算其字段之一的默认值(我们称之为分数):

我理想的做法是这样的:

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是要走的路,但我还没有能够实现它。

calculate_default 方法无权访问 self。 我尝试过的一种解决方案是覆盖 save() 方法。 问题在于它会阻止用户进一步更改分数字段。

其实是正确的做法。 但是你可以在save()方法中检查 score 的值是否为空:

def save(self, *args, **kwargs):
    if self.score == None:
       self.score = self.calculate_default()
    super().save(*args, **kwargs)

仅供参考,在classmethod ,您无法访问selfModelA对象。 如果您打算使用的类方法不依赖于ModelA字段的当前实例或完全独立的值(例如:当前日期datetime.now ),那么您可以使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM