2012-01-26 11 views
-1

私はdjangoを持つ学生のためのウェブサイトを作成したいと思います。Djangoで学生情報サイトを作成するための最良の方法

私は学生を作成するときに、私は既存のlearning_planを選択してlearning_planは、また、私はexam_gradesを持ちたいた自動すべての科目を持ちたいnの learning_plan 被験者

を持っています学生ごとに異なる

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() 

を私は私はそれを行う方法がわからない欲しいものを知っている:私はこれまで何をやったか

。私はSubject:Subject1、Subject2、Subject3という計画を持っています。新しい学生を追加するときに、計画を選択して、その学生に関連する学年のすべての科目を見て、それぞれの科目にexam_gradeを追加することができます(サブジェクト1、サブジェクト2、サブジェクト3 ...)、同じ科目の成績は学生ごとに異なります。私はこれを実装する方法を知らない。あなたは彼(彼女)の科目を取得する学生と何を持っている場合は

+0

正確には機能しないものはありますか? – DrTyrsa

+0

選択した学習計画のすべての科目と、exam_gradesを追加する可能性についてlearning_planを選択した場合、各生徒にお持ちになりたいと思います。 – CosminG

+0

いくつかのビュー、URL、テンプレートを追加する必要があるようです。または管理インターフェースを使用する。あなたはそれを試しましたか? – DrTyrsa

答えて

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() 

そして、試験を追加したいのであれば、それはまだsimpですファイル:

new_exam = Exam.objects.create(subject=some_subject, learning_plan=some_lp, exam_grade=98) 
student.learning_plan.exams.add(new_exam) 
関連する問題