jfeldman
@jfeldman
самоучка

Как кастомизировать создание пользователя в Django?

В Django есть стандартные средства создания пользователя, я раньше использовал
такой прием

class SignUp(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'


Но в текущем проекте не сам пользователь создает себе логин-пароль, а "старший по званию"
например директор создает логин учителю и тьютору, а тьютор родителю и ученику.
Тип пользователя хранится в Profile

При создании логина появляется дополнительный выбор, он зависит о того кто создает, например тьютор может при создании выбрать между родителем и учеником.

Я попытался расширить форму и реализовать дополнительное поле вот так

class SignUpFormTut(UserCreationForm):
    role = forms.ChoiceField(
        choices = (
            ('P','Родитель'),
            ('S','Ученик'),
        )
    )

class SignUpTut(generic.CreateView):
    form_class = SignUpFormTut
    success_url = reverse_lazy('login')
    template_name = 'signup.html'


поле появляется в форме но как использовать значение?
Была идея вставить код в сигнальную функцию, вот эту
но пока не работает

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@MAGistr_MTM
Учусь программировать
Можно в метод form_valid добавить логику для создания профиля. Посмотрите в доках что делает этот метод(он только создает Юзера + возвращает респонс)

Можно еще сигналом на пост сейв юзера. Но сигналы труднее тестить и дебажить. Можно как-то так:
def create_profile(sender, instance, created, **kwargs):
    """ Creates profile for user """
    CustomerProfile.objects.get_or_create(user=instance)


post_save.connect(create_profile, sender=USER_MODEL)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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