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)
最终执行步骤
- 保存修改后的
models.py文件 - 运行
python manage.py makemigrations生成迁移文件 - 运行
python manage.py migrate应用迁移 - 重新执行
python manage.py createsuperuser,此时系统会正常提示输入邮箱、username、first_name、last_name和密码,完成超级用户创建
内容的提问来源于stack exchange,提问作者Hakim kadem
相关产品推荐
相关产品推荐

