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

自定义User模型下createsuperuser无法登录Django管理后台

问题排查与解决

核心原因:超级用户处于未激活状态

你的UserAccount模型中is_active字段默认值是False,调用create_superuser方法时,仅设置了is_admin、is_staff、is_superuser为True,未将is_active设为True。Django认证系统会拒绝未激活用户登录,这是无法进入管理后台的直接原因。

修复步骤

1. 修正create_superuser方法

在UserAccountManager的create_superuser里添加激活设置:

def create_superuser(self, email, username, password):
    user = self.create_user(
        email=self.normalize_email(email),
        username=username,
        password=password
    )
    user.is_admin = True
    user.is_staff = True
    user.is_superuser = True
    user.is_active = True  # 新增这一行,激活用户
    user.save(using=self._db)
    return user

2. 调整last_login字段配置

当前last_login用了auto_now_add=True,该参数仅在用户创建时设置一次登录时间,后续登录不会更新,应改为auto_now=True:

last_login = models.DateTimeField(verbose_name='last_login', auto_now=True)

3. 注册自定义用户到Admin后台(关键遗漏)

Django Admin不会自动识别自定义用户模型,需手动注册。在account应用的admin.py中添加以下代码:

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

class CustomUserAdmin(UserAdmin):
    list_display = ('email', 'username', 'date_joined', 'last_login', 'is_admin', 'is_active')
    search_fields = ('email', 'username')
    readonly_fields = ('date_joined', 'last_login')

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('个人信息', {'fields': ('username',)}),
        ('权限设置', {'fields': ('is_admin', 'is_staff', 'is_superuser', 'is_active')}),
        ('重要时间', {'fields': ('date_joined', 'last_login')}),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'username', 'password1', 'password2', 'is_admin', 'is_staff', 'is_superuser', 'is_active')}
        ),
    )

    ordering = ('email',)

admin.site.register(UserAccount, CustomUserAdmin)

4. 激活现有超级用户或重新创建

如果已创建过超级用户,可通过Django Shell手动激活:

python manage.py shell

在Shell中执行:

from account.models import UserAccount
user = UserAccount.objects.get(email='你的超级用户邮箱')
user.is_active = True
user.save()

或删除旧超级用户,用修改后的代码重新创建:

python manage.py createsuperuser

额外注意

  • 每次修改模型后,需执行迁移:
python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:25:18