TypeError:create_user缺少3个必需的位置参数当创建createsuperuser时

问题描述

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

TypeError:create_user()缺少3个必需的位置参数: “名字”,“姓氏”和“角色”

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

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,first_name=None,last_name=None,role=None,password="",**extra_fields):
    user = self.create_user(
        email=self.normalize_email(email),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

解决方法

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在其参数中需要电子邮件,名字,姓氏和角色。一种方法是将其值设置为None / NULL(如果字段设置为blank = True,则设置为"")。但是,将模型的值设置为None / NULL时,请检查模型是否存在冲突。