В проекте требуется имя пользователя, это автоматически сгенерированный код. Для этого я сделал пользовательскую модель в соответствии с требованиями. Все работает нормально, но проблема в том, когда я пытаюсь создать суперпользователя, используя
python manage.py createsuperuser
Как я уже описал, имя пользователя является автоматически сгенерированным полем. Но консоль спрашивает у меня имя пользователя. После создания учетной записи суперпользователя необходимо распечатать код пользователя, так как мне нужен код для входа в систему, и суперпользователь успешно создан.
Как я могу получить эту функциональность? Я ищу в Google, но не могу найти подходящего решения.
Вот моя модель:
class User(AbstractBaseUser, PermissionsMixin):
"""Custom user model"""
code = models.CharField(max_length=20, unique=True, blank=False)
email = models.EmailField(max_length=255, unique=True, null=True)
name = models.CharField(max_length=255)
address = models.CharField(max_length=255, blank=True)
nid = models.CharField(max_length=30, blank=True)
profile_pic = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=10, choices=[('Male', 'Male'), ('Female', 'Female'), ('Other', 'Other')])
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'code'
REQUIRED_FIELDS = ['name']
Вот мой менеджер пользовательских настроек:
class UserManager(BaseUserManager):
use_in_migrations = True
def create_user(self, password, **extra_fields):
"""Create new user with auto-generated code and password"""
if 'name' not in extra_fields.keys():
raise ValueError('Name must be needed')
code = code_generator.generate_employee_code(extra_fields['name'][:2])
user = self.model(code=code, **extra_fields)
user.set_password(password)
if 'email' in extra_fields.keys():
email = self.normalize_email(extra_fields['email'])
user.email = email
try:
user.save(using=self._db)
except IntegrityError as e:
raise ValueError("Email has already been used")
return user
def create_superuser(self, name, password):
"""Create and save super user"""
user = self.create_user(password=password, name=name)
user.is_staff = True
user.is_superuser = True
user.is_admin = True
user.save(using=self._db)
return user