Reputation:
I get this error when trying to create superuser:
TypeError: create_user() missing 3 required positional arguments: 'first_name', 'last_name', and 'role'
Is this the proper way to create it? I want to create superuser without username, just with email, and user can login only with their email addresses, and now when I create superuser it wants email, how I wanted, but gives me the error too.
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
I don't understand the error message. I create superuser from:
python3 manage.py createsuperuser
Upvotes: 0
Views: 1191
Reputation: 335
def create_user(self, email, first_name, last_name, role, password=None, **extra_fields):
You created this, and when you want to create superuser, you called:
user = self.create_user(
email=self.normalize_email(email),
password=password
)
But create_user needs email, first_name, last_name and role in its arguments. One way is to set their value to None/NULL (or ""
if field is set to blank=True). However, please check if your model have any conflict when you set their value to None/NULL.
Upvotes: 1