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

Django自定义CustomUser模型后admin登录提示员工账号密码错误如何解决?

Django自定义用户模型后admin后台登录报错解决方案

问题原因

  • Django admin后台默认要求登录用户的is_staff字段值为True,你自定义的超级用户创建方法仅设置了自定义的is_admin标识,未配置admin要求的官方权限字段,导致创建的用户无后台登录权限,触发账号密码校验失败提示。

修复步骤

1. 调整自定义用户管理器的超级用户创建逻辑

修改models.py中CustomUserManager类的create_superuser方法,补全权限字段赋值:

def create_superuser(self, email, password=None):
    user=self.create_user(
        email,
        password=password
    )
    user.is_admin = True
    # 新增admin要求的权限字段赋值
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)
    return user

2. 修复已创建的超级用户权限

如果已经执行过迁移并创建了超级用户,有两种处理方式:

  • 直接操作数据库,将对应用户的is_staff、is_superuser字段值修改为1
  • 删除已生成的迁移文件和数据库文件,重新执行python manage.py makemigrations、python manage.py migrate,再重新运行python manage.py createsuperuser创建超级用户

3. (可选)补充权限校验方法

在CustomUser类中补充官方要求的权限校验方法,避免后续其他权限场景出错:

class CustomUser(AbstractUser):
    # 原有代码保持不变
    email = models.EmailField(
        verbose_name='Email',
        max_length=50,
        unique=True
    )
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email
    
    # 新增以下权限校验逻辑
    def has_perm(self, perm, obj=None):
        return self.is_superuser

    def has_module_perms(self, app_label):
        return self.is_superuser

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:39:05