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

执行python manage.py createsuperuser创建超级用户时报错:缺少username参数

问题分析与解决

错误原因

  1. REQUIRED_FIELDS 定义位置错误:它属于类级配置,需放在MyUserManager类的顶层,而非create_superuser方法内部,否则Django无法识别该配置。
  2. create_superuser 参数逻辑错误:你试图将extra_fields['phone']赋值给self.username,不符合方法参数传递逻辑;且Django的createsuperuser命令不会自动传入username参数,导致参数缺失报错。
  3. create_user 默认值占位符错误:参数中的...是语法占位符,需替换为实际默认值(如None)。

修复方案

步骤1:调整必填字段配置位置

将REQUIRED_FIELDS移至类顶层,指定创建用户时需输入的字段(你的场景为phone)。

步骤2:修正管理器方法逻辑

  • 在create_superuser中直接从extra_fields提取phone作为username,无需在方法参数中强制要求username。
  • 补全超级用户的必要属性默认值,确保父类方法调用参数正确。

修正后的代码

from django.contrib.auth.base_user import BaseUserManager
from typing import Any, Optional

class MyUserManager(BaseUserManager):
    # 类级必填字段配置,指定创建用户时需输入的字段
    REQUIRED_FIELDS = ['phone']

    def create_superuser(self, email: Optional[str], password: Optional[str], **extra_fields: Any) -> Any:
        # 从extra_fields中获取phone作为username
        username = extra_fields.get('phone')
        if not username:
            raise ValueError("必须填写手机号")
        
        # 设置超级用户的核心属性默认值
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        return super().create_superuser(username, email, password, **extra_fields)

    def create_user(self, email: Optional[str] = None, password: Optional[str] = None, **extra_fields: Any) -> Any:
        username = extra_fields.get('phone')
        if not username:
            raise ValueError("必须填写手机号")
        
        return super().create_user(username, email, password, **extra_fields)

验证修复

执行命令:

python manage.py createsuperuser

此时命令会提示输入手机号、邮箱和密码,即可成功创建超级用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:18