Django模型保存值的方法

Django model method for saving values

我想知道在 Django 模型中使用仅用于设置和保存值的方法是否是一种好习惯?例如我有一个模型:

class Team(models.Model):
    name = models.CharField(max_length=50)

    def set_name(self, name):
        self.name = name
        self.save()

我可以像这样在模型之外设置名称:

team.name = name
team.save()

或者我可以使用set_name方法:

team.set_name(name)

以我的理解,最好使用set_name方法,因为它是松耦合的。例如,如果我要更改 name 字段的名称,我将不需要在我的代码库中更新对该字段的所有引用。

如果你愿意可以(如果你要经常改变保存方式)
但是使用 this for efficiency

def set_name(self, name):
    self.name = name
    self.save(update_fields=['name'])

IMO 最好在模型的方法之外调用保存,因为您经常会在调用 save 时更改多个字段。因此,如果您要更改 namedate_last_active,您将不会使用 set_name 方法。

出于这个原因,Django 通常不会在模型方法上调用保存。 User.set_password() 就是一个例子。

而且,正如其他人肯定会说的那样,使用 save(update_fields=['field_a', 'field_b']) 提高效率。

没有技术上的理由让你不这样做,但我会说这不是一个好的做法,因为编写 setter 对 Python 文化来说是完全陌生的,因此它很可能会让人困惑而不是有用给其他开发者。