Django Admin无法识别超级用户问题求助
解决自定义User模型后Django Admin登录失败的问题
核心问题分析
你的自定义User模型设置了USERNAME_FIELD = 'email',但未完成关键配置,导致Django Admin无法正确识别用户,再加上is_active默认值为False,直接导致账号处于未激活状态,触发登录失败提示。
分步解决步骤
1. 在settings.py中指定自定义用户模型
必须明确告诉Django使用你的自定义User模型,添加以下配置:
# settings.py AUTH_USER_MODEL = '你的应用名.User'
替换你的应用名为实际包含User模型的应用名称,比如accounts.User
2. 激活超级用户账号
你的模型中is_active默认是False,创建超级用户时账号会处于未激活状态,可通过Django Shell手动激活:
运行命令进入shell:
python manage.py shell
执行激活代码:
from 你的应用名.models import User user = User.objects.get(email='你的超级用户邮箱') user.is_active = True user.save()
如果还未创建大量用户,也可以直接修改模型默认值,避免后续用户重复踩坑:
# models.py is_active = models.BooleanField(default=True)
修改后执行迁移:
python manage.py makemigrations python manage.py migrate
3. 在admin.py中正确注册自定义User模型
默认Admin配置适配原生User模型,需要注册自定义模型并调整Admin显示逻辑:
# admin.py from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User class CustomUserAdmin(UserAdmin): # 适配email作为登录字段的Admin配置 fieldsets = ( (None, {'fields': ('email', 'password')}), ('个人信息', {'fields': ('username',)}), ('权限配置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('关键日期', {'fields': ('last_login', 'date_joined')}), ) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'username', 'password1', 'password2', 'is_active', 'is_staff', 'is_superuser'), }), ) list_display = ('email', 'username', 'is_staff', 'is_active') search_fields = ('email', 'username') ordering = ('email',) admin.site.register(User, CustomUserAdmin)
4. 重新创建超级用户(可选)
如果之前的超级用户配置存在遗留问题,可删除后重新创建:
python manage.py createsuperuser
创建时确保输入正确的邮箱,若模型is_active默认值已改为True,无需再手动激活。
内容的提问来源于stack exchange,提问作者Adryan Taborda
相关产品推荐
相关产品推荐

