Django:根据 3 步外键连接过滤查询集

Django: filter a queryset based on a 3 step foreign key connection

我有一堆模型,通过用户模型关联:settings.AUTH_USER_MODEL

模型 1:

class Submission(models.Model):
    ...
    user = models.ForeignKey(settings.AUTH_USER_MODEL)

模型 2:

class Block(models.Model):
    ...
    current_teacher = models.ForeignKey(settings.AUTH_USER_MODEL)

模型 3:

class CourseStudent(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    block = models.ForeignKey(Block)
    ...

给定两个用户,一个是 BLock 模型中的 teacher,另一个是其他两个模型中的 student 用户,我如何获得一组提交的查询,其中: (抱歉,我正在为如何最好地描述这一点而苦苦挣扎)

换句话说:教师教授特定的模块,学生在这些模块中上课。学生提交作业。老师只想看到学生在他们(老师)的区块中提交的作业。

我想要用户 --> CourseStudent --> 块 --> current_teacher 给定教师的所有提交。

我想你正在寻找:

Submission.objects.filter(user__coursestudent__block__current_teacher=teacher).distinct()

你从你想要的东西开始 ("a query set of Submissions"),然后在关系中努力。 distinct() 的目的是去除重复的结果。 (例如,如果用户在两个不同的块中有相同的老师,则 Submission 将在没有它的情况下出现两次)。

我认为您需要在 Block 和 Submission 之间建立另一种关系,因为正如您所说,只有学生提交。因此,如果您过滤用户 --> CourseStudent --> 阻止 --> current_teacher 那么您会得到 'Teacher' 的提交,不是吗?或者我可能遗漏了什么。