Django: создание подклассов UserCreationForm: нет метода get_user ()? - PullRequest
0 голосов
/ 09 января 2019

Я создал пользовательского пользователя в Django, создав подкласс обычной модели User. Единственное отличие этого пользователя в том, что у него нет имени пользователя. Теперь я пытаюсь использовать встроенные Django UserCreationForms для входа в систему пользователей. Я создал подкласс UserCreationForm и создал SignUpForm, который не имеет поля имени пользователя.

Мой поток управления выглядит следующим образом: 1) Проверьте, если форма ввода действительна 2) если это так, выведите пользователя из формы 3) сохранить форму (тем самым сохраняя пользователя) 4) войти в систему пользователя

Однако, когда я пытаюсь вывести пользователя из экземпляра SignUpForm, он выдает мне эту ошибку: AttributeError в / user / signup Объект 'SignUpForm' не имеет атрибута 'get_user'

Я не понимаю этого, потому что SignUpForm напрямую разделен на подклассы из UserCreationForm, который реализует метод get_user (). Мой код для views.py ниже:


    from django.shortcuts import render, redirect
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth import authenticate, login
    from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
    from django.contrib.auth import get_user_model
    from django.db import models
    User = get_user_model()


    # Create your views here.

    class SignUpForm(UserCreationForm):
        email = models.EmailField(max_length=254, help_text='Required. Enter a valid email address.')
        username = None

        class Meta:
            model = User
            fields = ('email', 'password1', 'password2',)

    def signup(request):
        if request.method == 'POST': # if sending data to the server
            form = SignUpForm(request.POST)# creates form from request data
            if form.is_valid():
    #            print("form valid")
                user = form.get_user() # ERROR IS HERE
                form.save()
                login(request, user)
                return redirect('/manager')
            else:
                print("error")
        else:
            print("Get request asked for")
            form = SignUpForm()
            return render(request, 'user/signup.html', {'form': form}) # return rendered form

1 Ответ

0 голосов
/ 09 января 2019

Вы должны извинить меня, я неправильно прочитал документацию. UserCreationForm не имеет метода get_user (), но вместо этого возвращает пользователя при вызове метода save. Согласен ли я с этой реализацией? Нет, но я полагаю, что это помогает ограничить количество методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...