Как иметь несколько типов пользователей в django

это приложение представляет собой систему управления школой с помощью django

У меня есть три типа пользователей в моем веб-приложении, моя проблема в том, как авторизовать их и дать им разрешения.

пользователями являются: учитель, ученик, персонал школы (администраторы)

мне нужно иметь разные страницы (приложения) для каждого из них, например:

учитель -> login -> teacher_app.

student -> login -> student_app.

я новичок в django

мои модели выглядят примерно так:

class Student(models.Model) :
    national_id = models.CharField(
        max_length=50,
        unique=True,
    )

    name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    phone_number = models.CharField(max_length=50)

class Teacher(models.Model) :
    personal_id = models.CharField(
        max_length=50,
        unique=True,
    )

    name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    phone_number = models.CharField(
        max_length=50, 
        unique=True,
    )
    email = models.EmailField(
        max_length=250, 
        unique=True,
    )

class Class(models.Model):
    name = models.CharField(max_length=50)

    start_time = models.TimeField(
        auto_now=False, 
        auto_now_add=False,
        default=DEFAULT_START_TIME,
    )
    end_time = models.TimeField(
        auto_now=False,
        auto_now_add=False,
        default=DEFAULT_END_TIME,
    )

    # Relations
    teacher = models.ForeignKey(
        Teacher, 
        on_delete=models.CASCADE
    )
    students = models.ManyToManyField(Student)

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

В Django есть Roles и Groups для классификации пользователей. Что разрешено и запрещено, контролируется Permissions. Каждый Пользователь, Роль и Группа могут иметь различные специфичные для модели и специфичные для представления Разрешения. Система довольно сложна и допускает множество различных настроек. Я бы посоветовал вам ознакомиться с обзором, таким как этот.

Лучше обрабатывать это с помощью поля (а не с помощью 2 разных моделей), например, вы можете иметь что-то вроде этого:

class User(models.Model) :
    # NEW
    ROLES = (('student', 'Student'), ('teacher', 'Teacher'))
    role = models.CharField(
        max_length=20,
        choices=ROLES,
        default='student'
    )


    national_id = models.CharField(
        max_length=50,
        unique=True,
    )

    name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    phone_number = models.CharField(max_length=50)

Также можно использовать модель разрешений Django подробнее

Вернуться на верх