首页 > 解决方案 > Django如何过滤嵌套关系

问题描述

我有这两个模型

class Assignment(models.Model):
    subject_info = models.ForeignKey(SubjectInfo, on_delete=models.CASCADE, related_name='assignments')
    release_results = models.BooleanField(default=False)
    total_marks = models.IntegerField(default=0)
    deadline = models.DateTimeField()
class StudentAssignment(models.Model):
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE, related_name='submissions')
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    submitted = models.BooleanField(default=False)
    scored = models.BooleanField(default=False)
    status = models.CharField(choices=STATUS, max_length=50, null=True, blank=True)
    score = models.IntegerField(null=True, blank=True)

在我看来,我正在尝试完成以下所有任务:

1)没有与用户相关的学生作业

2)有一个与用户相关的studentassignment,但提交的值为False

我是这样做的:

    def get_queryset(self, *args, **kwargs):
        queryset = Assignment.objects.filter(
            subject_info__teacher__school=self.request.user.student.school,
            subject_info__related_class=self.request.user.student.current_class,
            subject_info__subject__in=self.request.user.student.subjects,
            deadline__gte=datetime.now(),
        ).exclude(
            submissions__isnull=True,
            submissions__student=self.request.user.student,
            submissions__submitted=False,
        )
        return queryset

但它没有返回正确的值。

请问我该如何解决这个问题?

标签: djangodjango-modelsforeign-keys

解决方案


你可以尝试这样使用Q

from django.db.models import Q

queryset = Assignment.objects.filter(
            Q(submissions__isnull=True) | Q(submissions__student__user=request.user, submissions__submitted=False)
        )

推荐阅读