Отношение многие ко многим с проверкой членства - PullRequest
0 голосов
/ 22 февраля 2012

Я хочу создать базу данных со следующими моделями и ограничениями.

1) Student with attributes name, roll number
2) Exam with attributes exam_code, exam_subject
3) Option with attributes option_name, and ManyToManyField on Exam
4) Application with user, exam, ManyToManyField on Options(new)

В основном будет много экзаменов и вариантов. Студент имеет право выбрать подмножество вариантов, относящихся к его выбору экзамена.

edit: Я полагаю, что с новой моделью Application проблема сводится к использованию javascript в интерфейсе для ограничения параметров, доступных в интерфейсе.

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

1 Ответ

1 голос
/ 22 февраля 2012

В нынешнем виде Студент на самом деле не играет в уравнение.Все, что имеет значение, это то, какие варианты доступны для конкретного рассматриваемого экзамена (где Студент только номинально связан, поскольку конкретный экзамен является точкой данных на нем).

Таким образом, в этом случае доступные вариантыдля студента всегда есть функция:

some_student.exam_taken.available_options.all()

То, что вы можете пожелать, - это способность студента сдать несколько экзаменов, а затем иметь все доступные вариантыдля всех сданных экзаменов - своего рода совокупность.

В таком случае, во-первых, вам потребуется M2M-связь, установленная между студентом и экзаменом (вместо внешнего ключа).Затем вы можете получить все доступные варианты из всех экзаменов по:

Option.objects.filter(exam__student=some_student).distinct()
...