Django:子类化 UserCreationForm:没有 get_user() 方法?
Django: Subclassing UserCreationForm: doesn't have get_user() method?
我通过继承普通用户模型在 Django 中创建了一个自定义用户。该用户的唯一区别是它没有用户名。现在,我正在尝试使用内置的 Django UserCreationForms 来登录用户。我将 UserCreationForm 子类化并创建了没有用户名字段的 SignUpForm。
我的控制流程如下:
1)检查输入表单是否有效
2)如果是,让用户离开表格
3)保存表格(从而节省用户)
4) 登录用户
但是,当我试图让用户退出 SignUpForm 实例时,它抛出了这个错误:AttributeError at /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
对不起,我读错了文档。 UserCreationForm 没有 get_user() 方法,而是在调用保存方法时 returns 一个用户。我同意这个实施吗?不,但我想这首先有助于限制方法的数量。
我通过继承普通用户模型在 Django 中创建了一个自定义用户。该用户的唯一区别是它没有用户名。现在,我正在尝试使用内置的 Django UserCreationForms 来登录用户。我将 UserCreationForm 子类化并创建了没有用户名字段的 SignUpForm。
我的控制流程如下: 1)检查输入表单是否有效 2)如果是,让用户离开表格 3)保存表格(从而节省用户) 4) 登录用户
但是,当我试图让用户退出 SignUpForm 实例时,它抛出了这个错误:AttributeError at /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
对不起,我读错了文档。 UserCreationForm 没有 get_user() 方法,而是在调用保存方法时 returns 一个用户。我同意这个实施吗?不,但我想这首先有助于限制方法的数量。