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

Django UserCreationForm自定义字段未在Admin新增页显示排查

问题原因
  • 核心原因是你写的UserRegForm根本没接入Django Admin的新增用户流程。Django自带的UserAdmin把新增用户、编辑用户拆成了两套完全独立的表单逻辑:默认新增用户走内置的UserCreationForm,这个表单天生就只带用户名、两次密码输入字段,根本不会读你自定义表单里配的fields,新增页自然不会让你填email、full_name,创建出来的用户这些字段当然是空的。
  • 你只写了表单类,没做Admin侧的绑定配置。Django不会自动扫描你写的ModelForm去覆盖默认Admin逻辑,你必须自己写一个继承自内置UserAdmin的自定义管理类,把add_form属性指定为你的UserRegForm,同时配套配置add_fieldsets声明新增页要展示的字段,新增流程才会走你定义的表单规则。
  • 你既然把email设成了USERNAME_FIELD,还用默认新增表单的话后续还会出别的问题:内置UserCreationForm默认把username当唯一登录标识,和你的用户模型设计完全不匹配,就算绕过去空值问题,后续账号校验、登录逻辑也会报错。
修复方式

直接参考如下配置调整你的Admin注册代码即可:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth import get_user_model
# 导入你自己定义的UserRegForm
from .forms import UserRegForm

User = get_user_model()

class CustomUserAdmin(BaseUserAdmin):
    # 绑定新增用户场景使用的自定义表单
    add_form = UserRegForm
    # 配置新增页展示的字段,注意要包含密码确认用的password1、password2字段
    add_fieldsets = (
        (None, {
            "classes": ("wide",),
            "fields": ("username", "email", "full_name", "password1", "password2"),
        }),
    )
    # 可选:按需调整编辑页的字段展示配置
    fieldsets = (
        (None, {"fields": ("username", "email", "password")}),
        ("个人信息", {"fields": ("full_name",)}),
        ("权限配置", {"fields": ("is_active", "is_staff", "is_superuser", "groups", "user_permissions")}),
    )

admin.site.register(User, CustomUserAdmin)

常见踩坑提示:不要只给自定义UserAdmin的form属性赋值,这个属性仅控制用户编辑页的表单,新增页只识别add_form配置,只改form就会出现你遇到的新增页字段不对、保存后字段为空的问题。

内容的提问来源于stack exchange,提问作者user13698713

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:18:17