问题描述
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时,请检查模型是否存在冲突。