2012-01-26 2 views
-1

Я хочу создать сайт для студентов с django.Лучший способ создания студенческого информационного сайта с django

У меня есть learning_plan с п субъектов

Когда я создаю студента Я хочу выбрать существующий 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() 

Я знаю, что я хочу, я не знаю, как это сделать. Я хочу иметь план с темами: Subject1, Subject2, Subject3 ... и когда я добавляю нового ученика, я выбираю план и вижу все предметы из класса, связанные со студентом, и могу добавить exam_grade для каждого из предметов (Subeject1, Subject2, Subject3 ...), а оценки для одного и того же предмета могут отличаться для разных учеников. Я не знаю, как это реализовать.

+0

Что именно не работает? – DrTyrsa

+0

Я хотел бы иметь у каждого ученика, если я выберу learn_plan все предметы из выбранного учебного плана и возможность добавить exam_grades. – 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 le:

new_exam = Exam.objects.create(subject=some_subject, learning_plan=some_lp, exam_grade=98) 
student.learning_plan.exams.add(new_exam) 
Смежные вопросы