自定义Author超级用户无法登录Django admin后台的问题求助
核心原因及对应解决方法
1. 用户管理器参数顺序传递错误(首要原因)
你定义的create_user方法参数顺序为def create_user(self, firstName, lastName, email, password, **other_fields),但create_superuser中调用该方法时的传参顺序为self.create_user(email, firstName, lastName, password, **other_fields),参数顺序完全错位:
- 你输入的邮箱会被赋值给
firstName字段 - 你输入的姓氏会被赋值给
email字段
导致最终数据库存储的邮箱和你输入的登录邮箱完全不匹配,系统找不到对应用户就会提示密码错误。
修复方法:修改create_superuser中的调用逻辑,要么对齐参数顺序,要么直接使用关键字参数避免顺序问题:
# 方法1:对齐参数顺序 return self.create_user(firstName, lastName, email, password, **other_fields) # 方法2:使用关键字参数(更稳妥) return self.create_user( firstName=firstName, lastName=lastName, email=email, password=password, **other_fields )
2. 未指定全局自定义用户模型
如果你没有在项目settings.py中添加如下配置,Django会默认使用内置的auth.User模型做身份认证,你创建的超级用户存储在自定义Author表中,认证时不会被识别:
# 替换your_app_name为你定义Author模型的应用名 AUTH_USER_MODEL = "your_app_name.Author"
3. 其他关联Bug导致用户创建失败
你的代码中还存在两处隐性问题,可能导致超级用户创建过程异常中断,实际没有成功生成可用的管理员账号:
Author模型的displayName字段没有设置默认值、也没有允许为空,创建用户时没有传入该字段会触发字段校验错误get_slug方法中调用了不存在的self.title属性,触发属性错误
修复参考:
# 给displayName设置默认值,或者加入REQUIRED_FIELDS displayName = models.CharField(max_length=300, default="") # 修改get_slug方法,替换为存在的字段,比如用firstName+lastName生成slug def get_slug(self): full_name = f"{self.firstName} {self.lastName}".replace("ı", "i") slug = slugify(full_name) # 后续生成唯一slug的逻辑保持不变
修复后操作
修正代码后删除原有数据库迁移文件、重新生成迁移并执行,再重新创建超级用户即可正常登录。
请输入正确的员工账号电子邮箱地址和密码,请注意两个字段的输入均区分大小写。
内容的提问来源于stack exchange,提问作者Yusuf Doğan
相关产品推荐
相关产品推荐

