查询ManyTomany多个表,以获取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') 

好吧,我要通过简单地简单地构建您的模型来进行操作:

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)

最新更新