2012-02-22 2 views
0

Я хочу создать базу данных со следующими моделями и ограничениями.Отношения «многие ко многим» с проверкой членства

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) 

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

Редактировать: С новой моделью приложения, я полагаю, проблема сводится к использованию javascript in the interface для ограничения возможностей, доступных в интерфейсе.

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

+0

Я думаю, что я понимаю эту проблему, но не могли бы вы попробовать перефразировать немного, просто так я ясно, что вы спрашиваете? –

+0

отредактировал вопрос. – primpap

ответ

1

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

Так, что не так, доступные опции для студента всегда зависит от:

some_student.exam_taken.available_options.all() 

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

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

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

Спасибо за ответ, особенно на вторую часть. Но, учитывая, что два экзамена могут иметь общие параметры, как я могу показать пересечение опций, связанных с несколькими экзаменами, как совокупность? – primpap

Смежные вопросы