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
相关产品推荐
相关产品推荐

