Создайте только одно приложение и используйте модели прокси для Student
, Parent
и Teacher
, каждая из которых наследуется от User
.Создайте и используйте группы, чтобы различать их, например, учащиеся будут User
s принадлежать к группе «Студент».
class StudentManager(models.Manager):
def get_query_set(self, *args, **kwargs):
qs = super(StudentManager, self).get_query_set(*args, **kwargs)
return qs.filter(groups__name='Student')
class Student(User):
objects = StudentManager()
class Meta:
proxy = True
Сполосните и повторите с Parent
и Teacher
.
Используйте сигналы для автоматической установки групп:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Student)
def set_student_group(sender, instance, created, **kwargs):
if created:
group, c = Group.objects.get_or_create(name='Student')
instance.groups.add(group)
Промойте и повторите для Parent
и Teacher
.
Теперь создайте модель профиля пользователя:
class UserProfile(models.Model):
user = models.OneToOneField(User)
# Other data
In settings.py:
AUTH_PROFILE_MODULE = 'yourapp.UserProfile'
Это даст вам всю необходимую инфраструктуру.Вы можете продолжить расширение моделей Student
, Parent
и Teacher
дополнительными функциями.Вы просто не можете добавлять новые поля к ним;все дополнительные поля должны быть заполнены UserProfile
.
Администраторы и только администраторы должны иметь доступ к администратору Django (User.is_staff=True
).Оттуда они могут сделать все необходимое управление.Вы должны разработать систему внешнего интерфейса, чтобы обслуживать учеников, учителей и родителей.