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

Django自定义UserAdmin报错:Unknown field(s) (username) specified for User

解决Django自定义User模型后台管理的FieldError(Unknown field 'username')

核心原因

自定义User模型移除了username字段,但Django默认的UserAdmin类仍在引用这个字段,导致后台添加/修改用户时触发错误。

解决步骤

1. 完全重写CustomUserAdmin的配置

自定义CustomUserAdmin时,必须显式覆盖所有涉及username的属性,彻底清除对该字段的引用:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    # 后台列表显示字段
    list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_active')
    # 编辑页面的字段分组
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('个人信息', {'fields': ('first_name', 'last_name')}),
        ('权限设置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('重要日期', {'fields': ('last_login', 'date_joined')}),
    )
    # 添加用户页面的字段
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )
    # 搜索字段改为email
    search_fields = ('email',)
    # 默认排序字段
    ordering = ('email',)
    # 和模型保持一致的USERNAME_FIELD
    USERNAME_FIELD = 'email'
    # 无需额外必填字段(email已作为登录标识)
    REQUIRED_FIELDS = []

2. 自定义用户表单(关键)

默认的UserCreationForm依赖username字段,必须自定义表单适配你的CustomUser模型:

from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ('email',)

class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = ('email', 'password', 'first_name', 'last_name', 'is_staff', 'is_active')

然后在CustomUserAdmin中绑定这两个表单:

class CustomUserAdmin(UserAdmin):
    # ... 其他配置 ...
    form = CustomUserChangeForm
    add_form = CustomUserCreationForm

3. 正确注册自定义用户模型

确保admin.py中注册的是你的CustomUser和对应的CustomUserAdmin,而非默认的User:

admin.site.register(CustomUser, CustomUserAdmin)

4. 验证settings.py配置

确认settings.py已指定自定义用户模型:

AUTH_USER_MODEL = '你的应用名.CustomUser'

5. 清理缓存并重启服务

如果之前有错误的迁移或缓存残留,执行以下操作:

  • 删除migrations目录下除__init__.py外的所有文件
  • 重新生成迁移:python manage.py makemigrations
  • 应用迁移:python manage.py migrate
  • 重启Django开发服务器

常见排查点

  • 检查是否有第三方应用或其他代码仍在引用默认的User模型,导致冲突
  • 确认CustomUser模型中确实没有username字段,且email字段已设置unique=True,USERNAME_FIELD = 'email'配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:13:20