DRF自定义AbstractBaseUser模型创建超级用户后无法查询问题排查
问题排查与修复
你的问题核心出在UserManager的create_user方法里——实例化用户模型时参数传递错误,导致用户根本没被正确写入数据库。
错误代码位置(managers.py)
原create_user方法中实例化模型的代码存在两处错误:
user = self.model(self, email, username, password, **extra_fields)
- 不该把
self(UserManager实例)传给模型构造函数,模型初始化不需要这个参数 - 不需要直接传递
password字段,因为后续已经通过set_password处理密码,直接传会导致字段赋值混乱
修正后的create_user方法
把实例化模型的代码修改为:
def create_user(self, email, username, password, **extra_fields): if email: email = self.normalize_email(email) self.email_validator(email) else: raise ValidationError(lz("an email address is required")) if not username: raise ValidationError(lz("a username is required")) # 修正参数传递:移除多余的self和password,用关键字参数赋值字段 user = self.model(email=email, username=username, **extra_fields) user.set_password(password) user.save(using=self._db) return user
额外必查项
- 确认项目
settings.py已配置自定义用户模型:
AUTH_USER_MODEL = '你的应用名.CustomUser'
- 执行数据库迁移,确保模型变更生效:
python manage.py makemigrations python manage.py migrate
- 重新创建超级用户:
python manage.py createsuperuser
完成以上操作后,超级用户会正常存入数据库,也能正常登录admin后台。
内容的提问来源于stack exchange,提问作者rokari19
相关产品推荐
相关产品推荐

