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

自定义Author超级用户无法登录Django admin后台的问题求助

Django自定义Author模型后台登录密码错误问题解决方案

核心原因及对应解决方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:45:02