与会员资格检查的多对多关系

时间:2012-02-22 12:15:14

标签: django many-to-many models

我希望使用具有以下模型和约束的数据库进行创建。

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来限制界面中可用的选项。

接下来的挑战在于处理具有多个科目的学生,他们的选项子集应该是两个考试可用的选项交叉(因为两个不同的考试可能有共同的选项)。关于这一部分的任何指导都会很棒。

1 个答案:

答案 0 :(得分:1)

目前看来,学生并没有真正发挥作用。重要的是所讨论的特定考试有哪些选项(学生名义上只是相关的,因为特定考试是一个数据点)。

因此,在这种情况下,学生可用的选项始终是:

some_student.exam_taken.available_options.all()

您可能想要的是,学生能够参加多个考试,然后为所有考试提供所有可用选项 - 这是一种聚合。 / p>

如果是这种情况,首先,您需要在学生和考试之间建立M2M关系(而不是外键)。然后,您可以通过以下方式从所有考试中获得所有可用选项:

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