Когда и где я использую create_user из CreateUserManager()?
Вот уже несколько дней я задаюсь вопросом, зачем мне создавать свой собственный менеджер пользователей в Django, поскольку, в конце концов, при наследовании встроенной формы я все равно не ссылаюсь на свой созданный менеджер.
class CustomUserManager(BaseUserManager):
def create_user(self, email, birth_date, password=None, **extra_fields):
if not email:
raise ValueError("You didn't entered a valid email address!")
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_stuff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
У меня есть что-то вроде этого, и в конце концов, когда он создает пользователя, он все равно не проходит через этот create_user.
Итак, мои два вопроса:
Зачем создавать что-то для пользовательского пользователя, если я все равно не смогу это использовать, потому что форма наследуется от UserCreationForm. Так, например, form.save() не использует мой менеджер.
В какой момент должен быть выполнен этот create_user?
Вопрос: Зачем создавать что-то для пользовательского пользователя, если я все равно не смогу это использовать, потому что форма наследуется от UserCreationForm. Так, например, form.save() не использует мой менеджер.
Ответ на ваш вопрос
Вам нужен пользовательский менеджер пользователей, потому что менеджер по умолчанию в Django не будет правильно обрабатывать ваши пользовательские поля, например, использовать электронную почту вместо имени пользователя.
Несмотря на то, что UserCreationForm не использует его по умолчанию, он все равно необходим, когда вы хотите создать пользователя вручную или убедиться, что суперпользователь настроен правильно
Вопрос 2. В какой момент следует выполнить команду create_user?
Ответ Вам следует вызывать create_user, когда вам нужно создать пользователя вручную, например, в ваших представлениях или в скрипте .py UserCreationForm в Django игнорирует его, если вы не переопределите функцию save(), поэтому измените форму или вызовите create_user вручную при добавлении пользователей за ее пределы.