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

发布于 2025-01-13 03:09:59 字数 2791 浏览 1 评论 0原文

我在 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)

我的数据库中有三个表

Student:

user_idStudent_name
14
24
31

Classroom:

idClassroom_subjectClassroom_code
1maths12345
2english12345
3Biology12345

Student_classes:

idStudent_idClassroom_id
141
242
311

在我的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(
        )

这段代码返回student_classes中的所有教室,但我希望它返回student_id = self.request.user.id的所有教室

因此例如self.request.user.id返回4,我想要student_classes表中student_id的所有教室= 4。

I have two models Student and Classroom in models.py

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)

I have three tables in my database

student:

user_idstudent_name
14
24
31

classroom:

idclassroom_subjectclassroom_code
1maths12345
2english12345
3biology12345

student_classes:

idstudent_idclassroom_id
141
242
311

In my 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(
        )

This code returns all the classrooms in student_classes, but i want it to return all the classrooms where the student_id = self.request.user.id

So for example self.request.user.id returns 4, I want all the classrooms in student_classes table where student_id = 4.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

以往的大感动 2025-01-20 03:09:59

使用:

Classroom.objects.filter(
    student__user=request.user
)

这将检索相关学生request.user作为user的所有Classroom

Work with:

Classroom.objects.filter(
    student__user=request.user
)

This will retrieve all Classrooms for which a related Student has as user the request.user.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文