Метод модели Джанго для сохранения значений - PullRequest
0 голосов
/ 28 сентября 2018

Мне интересно, хорошо ли иметь методы в модели 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 голосов
/ 28 сентября 2018

IMO, лучше вызывать save вне метода в модели, потому что часто вы будете вызывать save с более чем одним измененным полем.Поэтому, если бы вы меняли name и date_last_active, вы бы не использовали ваш метод set_name.

По этой причине Django обычно не вызывает save для методов модели.User.set_password() является примером этого.

И, как несомненно скажут другие, для эффективности используйте save(update_fields=['field_a', 'field_b']).

0 голосов
/ 28 сентября 2018

У вас нет технической причины не делать этого, но я бы сказал, что это не очень хорошая практика, потому что написание сеттеров совершенно чуждо культуре Python, и поэтому оно скорее сбивает с толку, чем помогает другим разработчикам.

0 голосов
/ 28 сентября 2018

Вы можете, если хотите (если вы собираетесь часто менять метод сохранения)
Но используйте для эффективности

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