Django: создание подклассов UserCreationForm: нет метода get_user()?
Я создал пользовательского пользователя в 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 ответ
Вы должны извинить меня, я неправильно прочитал документацию. UserCreationForm не имеет метода get_user(), но вместо этого возвращает пользователя при вызове метода save. Согласен ли я с этой реализацией? Нет, но я предполагаю, что это помогает ограничить количество методов в первую очередь.