用django创建学生信息网站的最佳方式

时间:2012-01-26 12:21:50

标签: django

我想为django的学生创建一个网站。

learning_plan ,n 科目

当我创建一个学生时,我想选择一个现有的learning_plan并自动拥有learning_plan所具有的所有主题,同时我希望每个学生都有 exam_grades

到目前为止我做了什么:

class Subject(models.Model):
    name = models.CharField(max_length=60)

    def __unicode__(self):
        return self.name

class LearningPlan(models.Model):
    name = models.CharField(max_length=60)
    subjects = models.ManyToManyField(Subject, through='Exam')

    def __unicode__(self):
        return self.name

class Student(models.Model):
    name = models.CharField(max_length=60)
    learning_plan = models.ForeignKey(LearningPlan)

    def __unicode__(self):
        return self.name


class Exam(models.Model):
    subject = models.ForeignKey(Subject)
    learning_plan = models.ForeignKey(LearningPlan)
    exam_grade = models.IntegerField()

我知道我想要什么,我不知道该怎么做。我想制定一个计划主题:主题1,主题2,主题3 ...当我添加新学生时,我选择一个计划并查看与学生相关的年级的所有科目,并且可以将exam_grade添加到每个科目(Subeject1,Subject2,Subject3 ...)和同一主题的成绩对于不同的学生是不同的。我不知道如何实现这个。

1 个答案:

答案 0 :(得分:1)

如果您有学生以及如何获得他(她)的科目,请使用:

student.learning_plan.subjects.all()

考试成绩也很简单,但最好先添加related_name

class Exam(models.Model):
    subject = models.ForeignKey(Subject)
    learning_plan = models.ForeignKey(LearningPlan, related_name='exams')
    exam_grade = models.IntegerField()

现在你可以参加学生的考试了:

student.learning_plan.exams.all()

如果你想增加一个考试,它仍然很简单:

new_exam = Exam.objects.create(subject=some_subject, learning_plan=some_lp, exam_grade=98)
student.learning_plan.exams.add(new_exam)