我想知道在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
字段的名称,则无需更新代码库中对该字段的所有引用。
答案 0 :(得分:3)
IMO最好在模型的方法外部调用save,因为通常您会在更改多个字段的情况下调用save
。因此,如果您要更改name
和date_last_active
,则不会使用set_name
方法。
出于这个原因,Django通常不会在模型方法上调用save。 User.set_password()
是一个例子。
而且,正如其他人无疑会说的那样,请使用save(update_fields=['field_a', 'field_b'])
来提高效率。
答案 1 :(得分:1)
您可以根据需要(如果您要经常更改保存方法)
但是请使用this for efficiency
def set_name(self, name):
self.name = name
self.save(update_fields=['name'])
答案 2 :(得分:0)
没有技术原因让您不这样做,但是我想说这不是一个好习惯,因为编写setter对Python文化完全陌生,因此,它很可能会使其他开发人员感到困惑,进而有所帮助。