我试图在Django中创建一个用户注册页面。一切都很顺利。但是当我提交表单数据时,我得到以下错误
AttributeError'User'对象没有属性'cleaning_data'
我在stackoverflow上搜索并发现object.cleanded_data应该放在object.is_valid()之后,否则应该面对AttributeError。但是在检查后is_valid()仍然出现错误后我放置了它。我的代码:
views.朋友
class UserFormView(View):
form_class = UserForm
template_name = "music/registration_form.html"
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {"form": form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = user.cleaned_data["username"]
password = user.cleaned_data["password"]
user.set_password(password)
user.username = username
user.save()
user = authenticate(username= username, password= password)
if user is not None:
if user.is_active:
login(request, user)
return redirect("music:index")
return render(request, self.template_name, {"form": form})
forms.朋友
from django.contrib.auth.models import User
from django import forms
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ["username", "email", "password"]
我无法找到我犯错误的地方。
form.save()
的结果是模型的一个实例,而不是形式。你应该访问form.cleaned_data
。
但是,没有必要在此处获取用户名,因为表单已经设置了它。
user = form.save(commit=False)
password = form.cleaned_data["password"]
user.set_password(password)
user.save()