首页 > 解决方案 > 类型错误:create_user() 缺少 3 个必需的位置参数(当 createsuperuser 时)

问题描述

尝试创建超级用户时出现此错误:

类型错误:create_user() 缺少 3 个必需的位置参数:“first_name”、“last_name”和“role”

这是创建它的正确方法吗?我想创建没有用户名的超级用户,只使用电子邮件,用户只能使用他们的电子邮件地址登录,现在当我创建超级用户时,它想要电子邮件,我想要的,但也给了我错误。

class MyAccountManager(BaseUserManager):

def create_user(self, email, first_name, last_name, role, password, **extra_fields):
    if not email:
        raise ValueError("Users must have an email address")
    user = self.model(
        email = self.normalize_email(email),
        password = password,
    )
    user.save(using=self._db)
    return user

def create_superuser(self, email, first_name=None, last_name=None, role=None, password="", **extra_fields):
    user = self.create_user(
        email=self.normalize_email(email),
        password = password,
        first_name = first_name,
        last_name = last_name,
        role=role,
    )
    user.is_admin = True
    user.is_employee = True
    user.is_headofdepartment = True
    user.is_reception = True
    user.is_patient = True
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)
    return user

class CustomUser(AbstractUser):

    ADMIN = 1
    RECEPTION = 2
    HEADOFDEPARTMENT = 3
    EMPLOYEE = 4
    PATIENT = 5
    NOTACTIVE = 6

    ROLE_CHOICES = (
        (ADMIN, 'Admin'),
        (RECEPTION, 'Reception'),
        (HEADOFDEPARTMENT, 'HeadOfDepartment'),
        (EMPLOYEE, 'Employee'),
        (PATIENT, 'Patient'),
        (NOTACTIVE, 'NotActive'),
      )
    role                            = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True, default=True, null=True)
    email                           = models.EmailField(verbose_name="email", max_length=60, unique=True) 
    is_superuser                    = models.BooleanField(default=False)
    is_admin                        = models.BooleanField(default=False)
    is_employee                     = models.BooleanField(default=False)
    is_headofdepartment             = models.BooleanField(default=False)
    is_reception                    = models.BooleanField(default=False)
    is_patient                      = models.BooleanField(default=False)
    is_active                       = models.BooleanField(default=True)
    is_staff                        = models.BooleanField(default=False)

    objects = MyAccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email
    
    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

我不明白错误信息。我从以下位置创建超级用户:

python3 manage.py createsuperuser

标签: djangopython-3.8django-2.2

解决方案


def create_user(self, email, first_name, last_name, role, password=None, **extra_fields):

你创建了这个,当你想创建超级用户时,你调用了:

user = self.create_user(
            email=self.normalize_email(email),
            password=password
        )

但是 create_user 在其参数中需要 email、first_name、last_name 和 role。一种方法是将它们的值设置为 None/NULL(或者""如果字段设置为空白 = True)。但是,当您将它们的值设置为 None/NULL 时,请检查您的模型是否有任何冲突。


推荐阅读