Я использую django для создания сайта и хочу связать репетиторов и студентов

В настоящее время я застрял на лучшем способе назначения тьюторов студентам, а затем тьюторы могут добавлять уроки для этих студентов, и они оба могут видеть эти уроки, но вы можете назначить только один внешний ключ для класса "MyLessons". Поэтому я не уверен, стоит ли создавать класс MyStudents, хранить студентов в нем (но их пользователь такой же, как и у тьюторов, за исключением is_tutor=false), а затем для каждого студента создавать класс MyLessons, в который тьютор может добавлять уроки.

Я думаю, что могу сделать подход, я просто беспокоюсь, что он не будет очень эффективным или возникнут серьезные проблемы в дальнейшем. Например, другой способ заключается в том, что каждый урок автоматически принимает email репетитора (я устанавливаю имя пользователя в email), а затем при отображении уроков репетитора он проходит через каждый урок и отображает уроки с соответствующим email... проблемы в том, что, если я переназначаю ученика новому репетитору, я бы хотел, чтобы новый репетитор видел уроки, но это означает ручное изменение каждого урока, и если есть слишком много уроков и учеников, процесс становится медленным.

У репетитора много учеников. У ученика потенциально может быть более одного тьютора. На первый взгляд, это реляционное поле ManyToMany.

Сначала смущает то, что отношения симметричны, но определены на одном объекте и только неявно на другом. Но неявные и явные поля работают одинаково, для манипуляции набором отношений.

class Tutor( models.Model)
    students = ManyToManyField( Student, related_name='tutors', ...)

then

student_instance.tutors.add( tutor_instance)
tutor_instance.students.add( student_instance)

оба достигают одного и того же. (В простейшем случае. Читайте в документации об исключениях).

Возможно, вам будет полезно или нет знать, что за кулисами Django работает с неявной таблицей, объекты которой имеют два поля, ForeignKey для студента и ForeignKey для преподавателя. Иногда бывает полезно сделать эту таблицу явной, чтобы вы могли прикрепить к отношениям дополнительную информацию, такую как дата создания, кто создал и т.д. Если вы хотите сделать это, посмотрите опцию "через" в ManyToMany.

Другие примеры здесь.

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