Django用户注册表单报错:存在未知字段password1、password2
Django注册表单报错解决:Unknown field(s) (password1, password2) specified for User
问题根源
你的代码存在三个关键错误:
- 拼写失误:
forms.py里把password拼成了passward,导致Django无法识别字段 - 字段声明错误:
password1和password2是UserCreationForm自带的表单字段,不属于User模型,不能写在Meta类的fields列表里 - 视图调用错误:
views.py的注册视图用了默认的UserCreationForm,而非你自定义的UserRegistrationForm,所以邮箱字段不显示
修正后的代码
forms.py
from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User class UserRegistrationForm(UserCreationForm): email = forms.EmailField(required=True) # 强制用户填写邮箱 class Meta: model = User fields = ['username', 'email'] # 仅声明User模型自带的字段,password1/password2由父类提供
views.py
from django.shortcuts import render, redirect from .forms import UserRegistrationForm def register(request): if request.method == 'POST': form = UserRegistrationForm(request.POST) if form.is_valid(): form.save() # 保存成功后跳转到登录页(假设你已配置名为login的URL) return redirect('login') else: form = UserRegistrationForm() return render(request, 'register.html', {"form": form})
补充说明
UserCreationForm已经内置了password1和password2的验证逻辑(比如两次密码一致性检查),无需额外编写- 给
email字段加required=True,确保用户必须填写邮箱,匹配你的需求 - 视图需处理POST请求,验证表单有效性后保存用户,再完成页面跳转
内容的提问来源于stack exchange,提问作者osama aslam
相关产品推荐
相关产品推荐

