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

Django自定义用户模型创建超级用户参数缺失问题求助

问题解决步骤

1. 修正必填字段变量名错误

你的Account模型里把REQUIRED_FIELDS写成了REQUIRED_FIELD(少了末尾的s),这是Django识别自定义用户必填字段的核心变量,拼写错误导致createsuperuser命令不会提示输入username、first_name、last_name,最终传给create_superuser方法时缺少这三个参数触发报错。

修改代码:

# 原错误代码
# REQUIRED_FIELD=['username','first_name','last_name']

# 修正后
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']

2. 调整create_superuser方法参数定义

Django的createsuperuser命令会按USERNAME_FIELD + REQUIRED_FIELDS的顺序传递参数,同时建议将password设为可选参数(默认None),避免强制传参的问题。修改MyAccountManager中的create_superuser方法:

def create_superuser(self, email, username, first_name, last_name, password=None):
    user = self.create_user(
        email=self.normalize_email(email),
        username=username,
        password=password,
        first_name=first_name,
        last_name=last_name,
    )
    user.is_admin = True
    user.is_active = True
    user.is_staff = True
    user.is_superadmin = True
    user.save(using=self._db)
    return user

3. 修正模型字符串表示方法

你的Account模型里把__str__写成了_str_(少了一个下划线),会导致模型实例的字符串输出异常,修正为:

# 原错误代码
# def _str_(self):
#     return self.email

# 修正后
def __str__(self):
    return self.email

4. 优化last_login字段配置

last_login字段应该使用auto_now=True,这样每次用户登录时会自动更新该字段,而auto_now_add=True只会在创建用户时设置一次:

# 原错误代码
# last_login=models.DateTimeField(auto_now_add=True)

# 修正后
last_login=models.DateTimeField(auto_now=True)

最终执行步骤

  1. 保存修改后的models.py文件
  2. 运行python manage.py makemigrations生成迁移文件
  3. 运行python manage.py migrate应用迁移
  4. 重新执行python manage.py createsuperuser,此时系统会正常提示输入邮箱、username、first_name、last_name和密码,完成超级用户创建

内容的提问来源于stack exchange,提问作者Hakim kadem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:21