django - 类型错误: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
解决方案
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 时,请检查您的模型是否有任何冲突。
推荐阅读
- sql - 即使数据库中不存在记录,如何检索默认值
- solana - 在 Ubuntu 上安装 solana - 它安装在哪里?
- python - 有没有办法使用 ethanfurman 的 dbf to csv python library dbf 替换和修剪单个字段中的值?
- java - 在每个索引处保存两个对象的数据结构(Java)
- r - 如何优化 R 中函数的期望值?
- spring-aop - Spring 中的 @Cacheable 不理解动态分配的值
- javascript - 将网站上的所有音频源连接到 AudioContext
- javascript - 反应流更改节点名称
- javascript - 尝试使用 JointJs 时未捕获的 TypeError
- node.js - NodeJS - 没有这样的文件或目录,scandir '/static/reports/'