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

Django自定义用户模型创建超级用户时缺失必填参数报错如何解决?

Django自定义用户模型创建超级用户报错解决方案

错误原因

报错由三处代码错误共同导致:

  • 第一处:必填字段属性拼写错误
    Django中指定createsuperuser命令需要额外输入的字段的属性为复数形式REQUIRED_FIELDS,你的代码里写成了单数REQUIRED_FIELD,系统无法识别到你配置的三个必填字段,因此执行命令时不会弹出对应输入提示,直接调用方法就会缺少入参。
  • 第二处:create_superuser方法语法错误
    你调用create_user的代码行末尾多写了一个逗号,会将返回的user对象自动包装为元组,后续给user赋值属性时会触发额外报错。
  • 第三处:超级用户属性配置缺失
    create_superuser方法需要额外给用户设置is_superuser = True和is_active = True,否则创建的账号没有超级管理员权限。同时如果要使用Django默认权限体系,用户模型需要额外继承PermissionsMixin。

修正后代码

修正后的MyAccountManager类

class MyAccountManager(BaseUserManager):
    def create_user(self, first_name, last_name, username, email, password=None):
        email = self.normalize_email(email)
        if not email:
            raise ValueError('User Must have a email')
    
        first_name = first_name.title()
        last_name = last_name.title()
        username = username.title()

        user = self.model(
            email=email,
            first_name=first_name,
            last_name=last_name,
            username=username
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, first_name, last_name, username, password=None):
        # 移除末尾多余逗号,修正user被转为元组的问题
        user = self.create_user(
            email=email, 
            password=password,
            first_name=first_name,
            last_name=last_name,
            username=username
        )
        user.is_staff = True
        # 补充超级用户必备属性
        user.is_superuser = True
        user.is_active = True
        user.save(using=self._db)
        return user

修正后的Account模型

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin

# 新增继承PermissionsMixin,支持Django默认权限体系
class Account(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(max_length=50, blank=True, null=True)
    last_name = models.CharField(max_length=50, blank=True, null=True)
    username = models.CharField(
        max_length=50, default='test', unique=True, blank=True, null=True)
    email = models.EmailField(max_length=100, unique=True)
    phone_number = models.CharField(max_length=50)

    # required
    date_joined = models.DateTimeField(auto_now_add=True)
    last_login = models.DateTimeField(auto_now_add=True)

    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

    objects = MyAccountManager()

    USERNAME_FIELD = 'email'
    # 修正为复数形式REQUIRED_FIELDS
    REQUIRED_FIELDS = ['username', 'first_name','last_name']

内容的提问来源于stack exchange,提问作者Md Mostafijur Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:04