@Mikkkch

Лишняя ли проверка в пользовательском менеджере?

Здравствуйте, в исходниках Django я вижу следующее:

def create_superuser(self, username, email=None, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

        return self._create_user(username, email, password, **extra_fields)

Это метод менеджера модели User.
Я написал свой менеджер и в нем этот метод выглядит следующим образом:
def create_superuser(self, email, password, **extra_fields):
        for field in ['is_staff', 'is_superuser', 'is_active']:
            extra_fields.setdefault(field, True)

            if not extra_fields.get(field):
                raise ValueError(f'Superuser must have {field}=True.')

        return self.create_user(email, password, **extra_fields)

Но из этого всего следует вопрос, заключающийся в том, что я не нахожу целесообразности производить проверку if not extra_fields.get, ожидая True, если мы только что сами в дикте установили значения в True. Так вот зачем же создатели фрейма таким образом организовали метод?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
@bacon
а ты точно понял как работает setdefault?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы