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.user = Submission.user
- CourseStudent.block 是 current_teacher=teacher
的街区之一
换句话说:教师教授特定的模块,学生在这些模块中上课。学生提交作业。老师只想看到学生在他们(老师)的区块中提交的作业。
或
我想要用户 --> 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' 的提交,不是吗?或者我可能遗漏了什么。
我有一堆模型,通过用户模型关联: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.user = Submission.user
- CourseStudent.block 是 current_teacher=teacher 的街区之一
换句话说:教师教授特定的模块,学生在这些模块中上课。学生提交作业。老师只想看到学生在他们(老师)的区块中提交的作业。
或
我想要用户 --> 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' 的提交,不是吗?或者我可能遗漏了什么。