2016-06-10 13 views
0

Die Idee ist, dass Schüler einen Ping an ihren Lehrer senden können, wenn sie etwas nicht verstehen, aber zuerst versuche ich, den Schüler, Lehrer und was auch immer Klasse sie in Beziehung sind so in meinen Modellen nach einem paar Versuchen habe ich mit diesenDjango immer noch fest (viele zu viele)

Modellen

from django.db import models 

class Student(models.Model): 
    name = models.CharField(max_length=50) 


class Teacher(models.Model): 
    name = models.CharField(max_length = 70) 

class Lecture(models.Model): 
    name = models.CharField(max_length = 70) 
    members = models.ManyToManyField(
     Student, 
     through = 'part_of_class', 
     through_fields = ('lecture', 'student'), 
    ) 
    lecturers = models.ManyToManyField(
     Teacher, 
     through = 'Teacher_of_class', 
     through_fields = ('lecture', 'teacher'), 
    ) 

class Teacher_of_class(models.Model): 
    lecture = models.ForeignKey(Lecture) 
    teacher = models.ForeignKey(Teacher) 

class part_of_class(models.Model): 
    lecture = models.ForeignKey(Lecture) 
    student = models.ForeignKey(Student) 

Frage ist das Hinzufügen von einem Student Feld vermasselt kommen, und ich bin nicht einmal sicher, ob dies der richtige Weg ist, es klingt richtig in meinem Kopf, aber ich bin sicher, dass ich etwas vermisse, irgendwelche Hinweise?

Antwort

1

Ich bin nicht ganz sicher, dass Sie explizite Vermittlerbeziehungen benötigen (Teacher_of_class und part_of_class). Stattdessen sollten Sie versuchen, Felder innerhalb der anderen Modelle zu verwenden, um das zu tun, was Sie wollen. Zum Beispiel, wird eine Vorlesung in der Regel mehr als einen Lehrer haben, oder nur einen? Sie könnten eines von denen mit einem Feld in Vorlesung modellieren.

Bearbeiten: Entschuldigung, ich habe Ihren Code zunächst in Bezug auf die Felder falsch gelesen. Mein Vorschlag ist, keine zusätzliche Beziehungsklasse zu verwenden, es sei denn, Sie wissen, warum Sie sie brauchen.

0

Wenn Sie nur eine Vorlesung haben möchten, die mehrere Studenten und mehrere Dozenten haben kann, brauchen Sie die Zwischenmodelle nicht, Django wird das für Sie übernehmen, wenn Sie keine angeben. Ich würde nur die Zwischentabellen verwenden, wenn Sie etwas mit dieser Beziehung speichern möchten.

Auch wenn Sie versuchen, Ihre Schüler- und Lehrerobjekte zum Vorlesungsmodell hinzuzufügen, müssen Sie sie speichern.

Ihr Code speichern sollte wie folgt aussehen:

aStudent = Student(name="Taco") 
aTeacher = Teacher(name="Burrito") 
aStudent.save() 
aTeacher.save() 
aLecture = Lecture(name="Cooking With Python!") 
aLecture.members.add(aStudent) 
aLecture.lecturers.add(aTeacher) 
aLecture.save() 

hoffe, das hilft!