2017-08-31 67 views
0

我試圖解決以下情況下的多個模型的數據多對多多個表:查詢爲獲得在Django

許多學生有很多科目,但只有一些科目標記爲他目前的主題,一個教室裏有多個科目,學生可以攜帶其他課堂的科目,可以從他當前的教室查看。

我想要獲得所有那些學生當前擁有的所有課程,以及那些課程中所有具有教室狀態的課程,無論是現在還是未來。

class Student(models.model): 
    id = models.OnetoOneField(User) 

class Subject(models.Model): 
    Subject_Master_Id=models.AutoField(primary_key=True) 
    Subject_Name=models.CharField(max_length=100,blank=False,unique=True) 
    user = models.ManyToManyField(Student,through = 'Student_Subject') 

class Classroom(models.Model): 
    Class_Master_Id=models.AutoField(primary_key=True) 
    Classroom_Student = models.ManyToManyField(Student,through='Classroom_Student',related_name='classroom_student') 
    Classroom_Subject = models.ManyToManyField(Subject,through='Classroom_Subject',related_name='classroom_subject') 

class Student_Subject(models.Model): 
    Student_Subject_Id = models.AutoField(primary_key=True) 
    subject= models.ForeignKey(Subject,on_delete = models.CASCADE, related_name='student_subject') 
    user=models.ForeignKey(Student,on_delete = models.CASCADE, related_name='student_subject') 
    is_current = models.BooleanField()  

class Classroom_Student(models.Model): 
    Classroom_Student_Id=models.AutoField(primary_key=True) 
    Classroom_Id=models.ForeignKey(Classroom,on_delete=CASCADE) 
    Student_Id=models.ForeignKey(Student,on_delete=CASCADE, related_name= 'student') 
    is_current = models.BooleanField() 

class Classroom_Subject(models.Model): 
    Classroom_Subject_Id=models.AutoField(primary_key=True) 
    Classroom_Id=models.ForeignKey(Classroom,on_delete=CASCADE) 
    Subject_Id=models.ForeignKey(Subject,on_delete=CASCADE, related_name='subject') 

回答

0

OK,我被大幅simplyfying模型繞了:

models.py

class Subject(models.Model): 
    name=models.CharField(max_length=100,blank=False,unique=True) 
    students = models.ManyToManyField(Student) 
    classroom = models.ForeignKey(Classroom) 

class Classroom(models.Model): 
    name=models.CharField(max_length=100,blank=False,unique=True) 

class Student(models.Model): 
    id = models.OnetoOneField(User) 
    current_location = models.ForeignKey(Classroom, null=True,blank=True) 

在閱讀你的目標:「我希望得到哪個學生目前所有科目已經與所有課堂上的課程對象具有課堂狀態,無論是否現在。「

這就是我所理解的你問的問題: 1.什麼科目是學生學習? 2.對於每個科目: 3.提供有關該科目教室的詳細信息 4.回答該教室是否爲學生當前的教室。

views.py

# say we are given variable student, an instance of Student model... 
students_subjects = student.subject_set.all(id=student.id) 
for subject in students_subjects: 
    description = "Subject:"+subject.name+" is in classroom:"+subject.classroom+" which is " 
    if not student.subject_set.filter(classroom=student.current_location).exists(): 
     description += "not " 
    description += "their current location." 
    print(description)