Как войти в django-custom-user в админ-панели?

3 типа пользователей с разными системами входа.

  1. Студент: использует уникальный идентификатор студента и пароль для входа в систему.
  2. SchoolAdmin: использует адрес электронной почты и пароль для входа.
  3. Разработчик (команда): использует электронную почту и пароль для входа в систему и может войти в панель администратора.

Вот мой BaseUser

class BaseUSER(AbstractBaseUser):

  email = models.EmailField(unique=True)
  first_name = models.CharField(max_length=50, null=True, blank=True)
  last_name = models.CharField(max_length=50, null=True, blank=True)

  USERNAME_FIELD = 'email'

Вот мой пользователь № 1 студент

class StudentUser(BaseUSER):

  student_id = models.CharField(primary_key=True,max_length=10)
  address = models.CharField(max_length=500, blank=True)
  city = models.CharField(max_length=50,blank=True, null=True)
  state = models.CharField(max_length=50, blank=True, null=True)
  pincode = models.CharField(max_length=6,blank=True, null=True)
  email_id =  models.EmailField(blank=True)
  phone_number = models.CharField(max_length=10, blank=True, null=True)
  mother_phone = models.CharField(max_length=10, blank=True, null=True)
  father_phone = models.CharField(max_length=10, blank=True, null=True)
  standard = models.CharField(max_length=2,blank=True, null=True)
  # bus_transport = models.ForeignKey(Bus,blank=True,null=True)

  USERNAME_FIELD = 'student_id'

Вот мой пользователь № 2 SchoolAdmin

class SchoolAdmin(BaseUSER):

  school = models.ForeignKey(School,blank=True,null=True)

  objects = NewUserManager()

  USERNAME_FIELD = 'email'

Вот мой пользователь нет. 3 команды разработчиков (для этого нужен доступ к админ-панели)

class team(BaseUSER):

  pin_level = models.CharField(max_length=10)

  def get_full_name(self):
    return self.first_name

Я создал свой менеджер пользователей для каждого

UserManager для школьного администратора

class NewUserManager(BaseUserManager):

  use_in_migrations = True

  def _create_user(self, email, password, **extra_fields):
    """
    Creates and saves a User with the given email and password.
    """
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

  def create_user(self, email, password=None, **extra_fields):
    extra_fields.setdefault('is_superuser', False)
    return self._create_user(email, password, **extra_fields)

Диспетчер пользователей для команды разработчиков:

class SuperManager(BaseUserManager):


  use_in_migrations = True

  def get_by_natural_key(self, email):
    return self.get(**{self.model.USERNAME_FIELD: email})

  def _create_user(self, email, password, **extra_fields):
    """
    Creates and saves a User with the given email and password.
    """
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)
    user = self.model(email=email, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    user.is_admin = True
    return user

  def create_user(self, email, password=None, **extra_fields):
    extra_fields.setdefault('is_superuser', False)
    return self._create_user(email, password, **extra_fields)


  def create_superuser(self, email, password, **extra_fields):
    extra_fields.setdefault('is_superuser', 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)

Я также создал аутентификационный бэкэнд для входа по электронной почте

Пожалуйста, посоветуйте мне, если я ошибаюсь где-то, что мне нужно сделать и каков будет мой дальнейший подход, когда я поражен здесь,

Я хочу реализовать Вход для панели администратора, и пользователь, который должен иметь возможность войти, относится к типу 3 или команде.

Заранее спасибо.

0 ответов

Другие вопросы по тегам