Django Queryset从两个多对多类

Django Queryset从两个多对多类,django,many-to-many,django-queryset,Django,Many To Many,Django Queryset,我一直在尝试编写一个Django应用程序来管理学校学生注册,因为我有两个模型学生模型&教室模型,这两个模型是通过自定义模型(注册模型)建立的多对多相关模型,如下所示: class Student(models.Model): fname = models.CharField(max_length=50) sname = models.CharField(max_length=50) gname = models.CharField(ma

我一直在尝试编写一个Django应用程序来管理学校学生注册,因为我有两个模型学生模型&教室模型,这两个模型是通过自定义模型(注册模型)建立的多对多相关模型,如下所示:

class Student(models.Model):
    fname       = models.CharField(max_length=50)
    sname       = models.CharField(max_length=50)
    gname       = models.CharField(max_length=50)
    lname       = models.CharField(max_length= 50)
    stdId       = models.CharField(max_length= 10)
    # other student attributes

class ClassRoom(models.Model):
    eduYear     = models.ForeignKey(EduYear, on_delete=models.CASCADE)
    stage       = models.ForeignKey(Stage, on_delete=models.CASCADE)
    stageClass  = models.ForeignKey(StageClass, on_delete=models.CASCADE)
    oneClass    = models.CharField(max_length=1)
    max_std     = models.IntegerField(null=True, blank=True)
    student     = models.ManyToManyField(Student, through='Enrollment')
    class Meta:
        unique_together = ("stage","stageClass","eduYear","oneClass")
    def __str__(self):
        pass
        return '{} {} {} {} '.format( self.eduYear,self.stage,self.stageClass, self.oneClass)
        # so, classroom will be as (2001 KG KG1 A) 

class Enrollment(models.Model):
    student   = models.ForeignKey(Student, on_delete=models.CASCADE)
    oneClass  = models.ForeignKey(OneClass, on_delete=models.CASCADE)
    EduYear   = models.CharField(max_length=9) #Description of education year
    # other extra fields
我为用户提供了一个用于保存学生信息的数据输入屏幕,其中课堂信息是使用Django管理输入的(因为它几乎不会改变)。用户可以随时使用注册类将保存的学生链接到任何教室。这意味着一些学生可以在没有教室的情况下获救(这是一项业务要求),将他们注册到教室可以在以后完成。为了注册学生,我使用Pk为两个班级(学生和教室)中的每一个班级创建一个新的注册班级条目,如下所示:

# code to get studentPk,classRoomPk from request.POST  
p =Enrollment.objects.create(student=studentPk, 
                             classRoom=classRoomPk, 
                             EduYear=request.POST['eduYearName'])
最后,我提供了一个搜索屏幕,允许用户按任何字段(当前为学生类的所有字段)进行搜索。 我可以开发一个显示所有学生的查询,或者一个显示所有注册学生的查询

我的问题是如何编写一个提供给所有学生的查询;他们是否已注册到clssroom,然后将结果查询集发送回模板?如果无法编写这样的查询,那么可能的解决方案是什么? 在模板中,我想将所有学生列为行,每行显示学生姓名、id和注册班级(如果学生未注册,则显示未注册)