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

Django3自定义User模型后Admin后台不显示用户管理模块问题

Django 3自定义用户模型后Admin后台缺失用户、权限管理入口问题

问题相关配置与代码

  • models.py 自定义用户模型实现:
class User(AbstractUser):
    is_patient = models.BooleanField(default=False)
    is_dentist = models.BooleanField(default=False)
    is_manager = models.BooleanField(default=False)
  • views.py 牙医账号创建、登录逻辑:
def create_account_dentist(request):
if request.method == 'POST':
    # 创建牙医类型用户
    username = request.POST.get('username')    
    password = request.POST.get('password')
    mobile_num = request.POST.get('mobilenum')
    user_profile = User()        
    user_profile.username = username
    user_profile.email = username
    user_profile.set_password(password)
    user_profile.is_dentist = True
    user_profile.is_staff = True
    user_profile.is_active = True
    user_profile.mobile_number = mobile_num
    user_profile.save()
    login(request, user_profile)
    return redirect(reverse('dentist-section'))
  • settings.py 已完成配置项:AUTH_USER_MODEL = 'myapp.User'

异常现象

访问Admin后台仅能看到Groups分组板块,找不到用户、权限相关管理入口;数据库已正常生成myapp_user等业务表,表中已存在创建成功的用户数据,但无法在Admin页面查看、管理。

期望效果

Admin后台正常展示、支持统一管理用户、权限、用户分组内容。

当前已生成数据库表清单

auth_group、auth_group_permissions、auth_permission、django_admin_log、django_content_type、django_migrations、django_session、myapp_dentist、myapp_manager、myapp_patient、myapp_user、myapp_user_groups、myapp_user_user_permissions

问题根因

配置AUTH_USER_MODEL替换默认用户模型后,Django会自动卸载内置auth模块默认的User模型Admin注册逻辑,没有手动在对应app的admin.py中注册自定义User模型并适配Admin管理类,是导致入口缺失的核心原因。
额外注意:视图中创建的牙医账号仅配置了is_staff=True,没有超级管理员权限、也未被分配用户管理权限的前提下,就算完成模型注册,这类账号登录后也看不到用户、权限管理板块,必须使用超级管理员账号登录才能访问全量管理功能。

修复方案
  1. 打开myapp/admin.py,添加如下代码注册自定义User模型,适配原有Admin的用户管理能力:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User

class CustomUserAdmin(BaseUserAdmin):
    # 配置用户列表页展示字段,可按需调整
    list_display = ('username', 'email', 'is_staff', 'is_patient', 'is_dentist', 'is_manager')
    # 配置用户编辑页字段分组,保留原有权限、分组相关配置,追加自定义字段
    fieldsets = BaseUserAdmin.fieldsets + (
        ('自定义身份信息', {'fields': ('is_patient', 'is_dentist', 'is_manager', 'mobile_number')}),
    )
    # 配置新建用户页的字段
    add_fieldsets = BaseUserAdmin.add_fieldsets + (
        ('自定义身份信息', {'fields': ('is_patient', 'is_dentist', 'is_manager', 'mobile_number')}),
    )

admin.site.register(User, CustomUserAdmin)

不要直接使用admin.site.register(User)注册,否则会丢失密码修改、权限关联、分组管理等内置用户功能,必须继承Django自带的UserAdmin做扩展。

  1. 若当前没有可用的超级管理员账号,在项目根目录执行命令创建:
    python manage.py createsuperuser
    按照终端提示输入账号、密码等信息,使用该账号重新登录Admin后台即可看到所有管理入口。
  2. 若完成以上操作后权限入口仍未正常展示,执行以下命令同步权限配置(不会丢失现有业务数据):
python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:27