如何在 Django 的多对多字段中获取对象的查询集

How to get queryset of objects in many to many field in Django

我在 models.py

中有两个模型 Student 和 Classroom
class Classroom(models.Model):
    classroom_subject = models.CharField(max_length=100)
    classroom_code = models.CharField(max_length= 5, default = '00000')
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    student_name = models.CharField(max_length=100)
    classes = models.ManyToManyField(Classroom, blank = True)

我的数据库中有三个 table

学生:

user_id student_name
1 4
2 4
3 1

教室:

id classroom_subject classroom_code
1 maths 12345
2 english 12345
3 biology 12345

student_classes:

id student_id classroom_id
1 4 1
2 4 2
3 1 1

在我的views.py

class StudentClassesView(ListView):
    model = Classroom
    template_name = 'student_classroom_list.html'
    context_object_name = 'classroom_list'

    
    def get_queryset(self):
        student_id = self.request.user.id
        return Student.classes.through.objects.filter(
        )

此代码 return 用于 student_classes 中的所有教室,但我希望它用于 return student_id = self.request.user.id 中的所有教室

例如 self.request.user.id returns 4,我想要 student_classes table 中的所有教室,其中 student_id = 4.

合作对象:

Classroom.objects.filter(
    <strong>student__user=request.user</strong>
)

这将检索相关 Student 具有 userrequest.user 的所有 Classroom