2012-01-26 5 views
-1

장고를 가진 학생들을위한 웹 사이트를 만들고 싶습니다. 나는 학생을 만들 때장고로 학생 정보 사이트를 만드는 가장 좋은 방법

나는 기존의 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() 

나는 그것을 할 방법을 모르는 내가 원하는 것을 알고있다. Subject1, Subject2, Subject3 ...과 같은 계획을 갖고 싶습니다. 새로운 학생을 추가 할 때 계획을 선택하고 학생과 관련된 등급의 모든 과목을보고 exam_grade를 각 과목에 추가 할 수 있습니다 (Subeject1, Subject2, Subject3 ...)과 같은 과목의 성적은 학생들마다 다릅니다. 나는 이것을 구현하는 방법을 모른다. 당신이 그의 (그녀의) 과목을 얻을 수있는 학생이 어떤이있는 경우

+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) 
관련 문제