You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django自定义User模型注册时需三次输入密码的问题求助

问题根源及修复方案

核心问题分析

你的代码存在三个关键错误,直接导致了当前的异常:

  1. 表单字段与模型不匹配:User模型已移除username并将email设为唯一标识,但SignUpForm里却定义了username字段,提交后无法将表单值映射到模型的email字段,所以创建的用户没有邮箱信息。
  2. 重复定义密码字段:UserCreationForm本身已内置password1(密码)和password2(确认密码)字段,你额外手动添加了password字段,这就导致页面出现三个必填密码输入框。
  3. Meta类字段配置错误:表单Meta里指定的fields是username,但模型中该字段已被禁用,完全无效。

修正后的SignUpForm代码

from django import forms
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm, UserChangeForm
from django.forms.widgets import PasswordInput, TextInput
from .models import User

class CustomAuthForm(AuthenticationForm):
    username = forms.EmailField(widget=TextInput(attrs={
        'type':'email',
        'class':'form-control',
        'placeholder': 'Email',
        }))
    password = forms.CharField(widget=PasswordInput(attrs={
        'type':'password',
        'class':'form-control',
        'placeholder':'Password',
        }))

class SignUpForm(UserCreationForm):
    # 替换原username字段为模型对应的email字段
    email = forms.EmailField(widget=TextInput(attrs={
        'type':'email',
        'class':'form-control',
        'placeholder': 'Email',
        }))
    
    # 仅自定义内置password1和password2的样式,不再重复新增password字段
    password1 = forms.CharField(widget=PasswordInput(attrs={
        'type':'password',
        'class':'form-control',
        'placeholder':'Password',
    }))
    password2 = forms.CharField(widget=PasswordInput(attrs={
        'type':'password',
        'class':'form-control',
        'placeholder':'Reenter Password',
    }))

    class Meta:
        model = User
        fields = ('email',)  # 对应模型的email字段

额外说明

  1. 修正后表单只会显示email、password1、password2三个字段,符合正常注册流程。
  2. 提交时email字段值会正确映射到User模型的email字段,解决用户无邮箱的问题。
  3. 认证表单CustomAuthForm可以保持现状,因为你的User模型用email作为USERNAME_FIELD,Django会自动识别输入的邮箱作为认证标识。

内容的提问来源于stack exchange,提问作者Agustin Gonzalez Ribas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:15:51