В прежние времена я использовал три модели: «Пользователь» (из AbstractBaseUser), «Учитель» и «Ученик».
Ученик мог создать запрос, а учитель мог попросить нести ответственность за этот запрос. Если ученик согласится, то учитель станет ответственным за этот запрос.
Вот как выглядит таблица запроса:
class Request(models.Model):
request_id = models.CharField(db_column='requestId', primary_key=True, max_length=36)
date_created = models.DateField(db_column='dateCreated')
title = models.CharField(max_length=30)
request_description = models.CharField(db_column='requestDescription', max_length=280, blank=True, null=True)
expiration_date = models.DateField(db_column='expirationDate', blank=True, null=True)
done = models.IntegerField(blank=True, null=True)
student_id = models.ForeignKey(Student, models.DO_NOTHING, db_column='studentId')
teacher_id = models.ForeignKey(Teacher, models.DO_NOTHING, db_column='teacherId', blank=True, null=True)
Как вы можете видеть, есть student_id и teacher_id с ForeignKey соответственно, модели ученика и учителя.
Теперь я использую только одну модель для представления пользователя, учителя и ученика, которая называется MyUser. В этой модели получено поле
user_type = models.IntegerField(db_column='userType')
, где 0 - это MyUser с большими разрешениями, а 255 - это неопределенный MyUser.
Что теперь происходит с FK в запросе? Кроме того, как обращаться с Учителем и Студентом через это поле?