【问题标题】:Django how to filter nested relationshipsDjango如何过滤嵌套关系
【发布时间】:2020-05-25 05:40:37
【问题描述】:

我有这两个模型

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) 有一个与用户相关的学生作业,但提交的值为 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

但它没有返回正确的值。

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

【问题讨论】:

    标签: django django-models foreign-keys


    【解决方案1】:

    你可以这样尝试使用Q:

    from django.db.models import Q
    
    queryset = Assignment.objects.filter(
                Q(submissions__isnull=True) | Q(submissions__student__user=request.user, submissions__submitted=False)
            )
    

    【讨论】:

    • 我不认为它会起作用,因为我说'作业不包含与提出请求的用户相关的学生作业'
    • 尝试看看用例,但感谢您的尝试
    • 我认为您没有提到:作业不包含与提出请求的用户相关的学生作业。无论如何,更新我的答案。
    • 它现在似乎可以工作了。感谢您的宝贵时间
    猜你喜欢
    • 2017-06-28
    • 2020-11-22
    • 2017-03-02
    • 2018-02-18
    • 2015-10-16
    • 1970-01-01
    • 2016-05-01
    • 2020-10-15
    • 2021-11-21
    相关资源
    最近更新 更多