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

配置自定义用户模型无法登录Django Admin后台如何解决

问题原因与修复方案

你的Admin后台登录报错,是自定义用户模型、管理器、配置存在多处不符合Django规范的问题,按以下步骤逐一修复即可:

  • 修复模型类名与配置不匹配问题
    你定义的模型类为小写开头的tgUser,既不符合Django模型大驼峰命名规范,也和settings中AUTH_USER_MODEL = "table.TgUser"的大写T类名不匹配,会导致用户模型引用异常。直接将模型类名修改为TgUser:
    class TgUser(AbstractBaseUser, PermissionsMixin):
    
  • 重写正确的UserManager逻辑
    现有用户管理器存在两个致命问题:一是创建实例时传参不规范、不支持额外字段写入;二是创建超级用户时未设置is_superuser=True,会被PermissionsMixin的权限校验判定为无管理员权限。将原有UserManager替换为如下代码:
    class UserManager(BaseUserManager):
        def create_user(self, username, password=None, **extra_fields):
            user = self.model(username=username, **extra_fields)
            user.set_password(password)
            user.save(using=self._db)
            return user
    
        def create_superuser(self, username, password, **extra_fields):
            extra_fields.setdefault("is_staff", True)
            extra_fields.setdefault("is_superuser", True)
            extra_fields.setdefault("is_admin", True)
            return self.create_user(username, password, **extra_fields)
    
  • 补全用户模型的权限校验方法
    自定义用户模型必须实现has_perm、has_module_perms两个方法供Admin后台做权限判断,缺失这两个方法会直接导致权限校验不通过。在TgUser类中添加如下代码:
    def has_perm(self, perm, obj=None):
        return self.is_superuser or self.is_admin
    
    def has_module_perms(self, app_label):
        return self.is_superuser or self.is_admin
    
    额外建议:将模型中名为id的CharField改名为tg_id,避免和Django模型内置的主键属性id产生命名冲突,减少隐性报错概率。
  • 重置迁移与数据库
    之前错误的模型定义已经生成了错误的表结构,必须清理后重新生成:
    1. 删除table应用下migrations文件夹中除__init__.py外的所有文件
    2. 删除本地数据库文件(使用默认sqlite时直接删除根目录下的db.sqlite3)
    3. 依次执行python manage.py makemigrations、python manage.py migrate生成正确的表结构
  • 重新创建超级用户
    执行命令python manage.py createsuperuser,按提示输入用户名、密码生成新的管理员账号,用该账号即可正常登录Admin后台。

注意:之前给is_staff字段添加@property装饰器的操作是错误的,is_staff已经是模型字段,加装饰器会覆盖字段正常的读写逻辑,直接删除该装饰器即可。

内容的提问来源于stack exchange,提问作者Angela Riley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:21:23