用于保存值的Django模型方法

时间:2018-09-28 09:24:04

标签: python django django-models architecture loose-coupling

我想知道在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字段的名称,则无需更新代码库中对该字段的所有引用。

3 个答案:

答案 0 :(得分:3)

IMO最好在模型的方法外部调用save,因为通常您会在更改多个字段的情况下调用save。因此,如果您要更改namedate_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文化完全陌生,因此,它很可能会使其他开发人员感到困惑,进而有所帮助。