我想为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 ...)和同一主题的成绩对于不同的学生是不同的。我不知道如何实现这个。
答案 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)