когда я создаю суперпользователя для пользовательской модели пользователя, он не предоставляет мне имя пользователя, имя, фамилию, а затем показывает ошибку

#django #django-models #django-custom-user #django-custom-manager

Вопрос:

когда я создаю суперпользователя для пользовательской модели пользователя, он не предоставляет мне имя пользователя, имя, фамилию, а затем показывает эту ошибку: MyAccountManager.create_superuser() отсутствуют 3 обязательных позиционных аргумента: «имя пользователя», «фамилия» и «имя пользователя».

Вот Мой Код:

 class MyAccountManager(BaseUserManager):  def create_user(self,first_name,last_name, username, email, password=None):  email = self.normalize_email(email)  if email is None:  raise ValueError('User Must have a email')    first_name = first_name.title()  last_name = last_name.title()  username = username.title()   user = self.model(  email=email,  first_name= first_name,  last_name=last_name,  username=username     )  user.set_password(password)  user.save(using = self._db)  return user   def create_superuser(self, email,first_name,last_name, username, password=None):  user = self.create_user(email=email, password=password,first_name= first_name,  last_name=last_name,  username=username),  user.is_staff = True    user.save(using = self._db)    class Account(AbstractBaseUser):  first_name = models.CharField(max_length=50, blank=True, null=True)  last_name = models.CharField(max_length=50, blank=True, null=True)  username = models.CharField(  max_length=50, default='test', unique=True, blank=True, null=True)  email = models.EmailField(max_length=100, unique=True)  phone_number = models.CharField(max_length=50)  # required  date_joined = models.DateTimeField(auto_now_add=True)  last_login = models.DateTimeField(auto_now_add=True)   is_staff = models.BooleanField(default=False)  is_active = models.BooleanField(default=False)   objects = MyAccountManager()   USERNAME_FIELD = 'email'  REQUIRED_FIELD = ['username', 'first_name','last_name']  

Комментарии:

1. Я думаю, что вы не указали имя пользователя, имя, фамилию при создании суперпользователя

2. в консоли нет поля для отправки имени пользователя, имени,фамилии

Ответ №1:

Вы можете написать свой метод create_superuser следующим образом:

 class MyAccountManager(BaseUserManager):   def create_superuser(self, email, password, **extra_fields):  """  Create and save a SuperUser with the given email and password.  """  extra_fields.setdefault('is_staff', True)  extra_fields.setdefault('is_superuser', True)  extra_fields.setdefault('is_active', True)   if extra_fields.get('is_staff') is not True:  raise ValueError(_('Superuser must have is_staff=True.'))  if extra_fields.get('is_superuser') is not True:  raise ValueError(_('Superuser must have is_superuser=True.'))  return self.create_user(email, password, **extra_fields)  

Ответ №2:

Это работает:

 class MyAccountManager(BaseUserManager):  def create_user(self, email, password=None, **extra_fields):  email = self.normalize_email(email)  if email is None:  raise ValueError('User Must have a email')   # first_name = first_name.title()  # last_name = last_name.title()  # username = username.title()   user = self.model(  email=email,  # first_name=first_name,  # last_name=last_name,  # username=username,  **extra_fields    )  user.set_password(password)  user.save(using=self._db)  return user   def create_superuser(self, email, password, **extra_fields):  """  Create and save a SuperUser with the given email and password.  """  extra_fields.setdefault('is_staff', True)  extra_fields.setdefault('is_admin', True)  extra_fields.setdefault('is_active', True)   if extra_fields.get('is_staff') is not True:  raise ValueError(('Superuser must have is_staff=True.'))  # if extra_fields.get('is_superuser') is not True:  # raise ValueError(('Superuser must have is_superuser=True.'))  return self.create_user(email=email, password=password,**extra_fields)   class Account(AbstractBaseUser):  first_name = models.CharField(max_length=50, blank=True, null=True)  last_name = models.CharField(max_length=50, blank=True, null=True)  username = models.CharField(  max_length=50, unique=True, blank=True, null=True)  email = models.EmailField(max_length=100, unique=True)  phone_number = models.CharField(max_length=50)   # required  date_joined = models.DateTimeField(auto_now_add=True)  last_login = models.DateTimeField(auto_now_add=True)   is_staff = models.BooleanField(default=False)  is_active = models.BooleanField(default=False)  is_admin = models.BooleanField(default=False)   objects = MyAccountManager()   USERNAME_FIELD = 'email'  REQUIRED_FIELD = ['username', 'first_name', 'last_name']   def __str__(self):  return self.email   def has_perm(self,perm, obj=None ):  return self.is_admin   def has_module_perms(self, add_label):  return True