Django自定义User模型无法在Admin后台注册问题求助
解决Django 2.0自定义User模型无法在Admin后台显示的问题
嘿,我看你已经跟着Django 2.0官方文档替换了自定义User模型,能创建账号也能登录,但Admin后台看不到用户对吧?十有八九是自定义模型没在Admin里正确注册,或者有些配置漏了,我给你一步步捋清楚怎么解决:
1. 先确认自定义User模型的完整定义
首先得保证你的sign_up/models.py里的模型是完整的,比如这样:
from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): # 这里可以加你的自定义字段,比如手机号 phone = models.CharField(max_length=11, blank=True, null=True) class Meta: verbose_name = "用户" verbose_name_plural = "用户"
2. 务必在settings.py里指定AUTH_USER_MODEL
这一步是替换自定义User模型的核心,你肯定已经加了,但再确认下项目根目录的settings.py里有这行:
AUTH_USER_MODEL = 'sign_up.CustomUser'
3. 重点!在Admin中注册自定义User模型
这应该是你遗漏的关键步骤!默认情况下Django Admin不会自动识别自定义的User模型,必须手动注册,而且要配合UserAdmin类才能显示完整的用户管理界面:
方式一:直接用默认的UserAdmin(适合没有自定义字段的情况)
在sign_up/admin.py里加这段代码:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser admin.site.register(CustomUser, UserAdmin)
方式二:自定义Admin类(如果有自定义字段要在Admin显示)
如果你的CustomUser加了自己的字段(比如上面的phone),想要在Admin后台编辑查看,就继承UserAdmin自定义:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser class CustomUserAdmin(UserAdmin): # 列表页显示的字段 list_display = ('username', 'email', 'phone', 'is_staff', 'is_active') # 编辑页的字段分组 fieldsets = ( (None, {'fields': ('username', 'password')}), ('个人信息', {'fields': ('first_name', 'last_name', 'email', 'phone')}), ('权限设置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('重要日期', {'fields': ('last_login', 'date_joined')}), ) admin.site.register(CustomUser, CustomUserAdmin)
4. 数据库迁移的注意点
如果你是中途替换的User模型(不是项目一开始就设置AUTH_USER_MODEL),那得清空原有数据库重新迁移,不然会有冲突:
python manage.py flush python manage.py makemigrations python manage.py migrate
如果是新项目一开始就配置了自定义User模型,直接正常执行迁移就行。
5. 最后验证
做完上面这些步骤,重启Django服务器,登录Admin后台,就能看到“用户”(或者你在Meta里设置的名称)的管理入口啦!
内容的提问来源于stack exchange,提问作者Oblivionkey3




