如何通过分类ID查询CourseRun?Django多对多反向查询问题
解决方案:通过分类ID查询CourseRun
没问题,我来帮你搞定这个Django查询的问题!因为你的多对多关联定义在Category模型中,且给Course设置了反向关联的related_name='category_set',只需要调整查询里的关联字段名称,就能实现你想要的效果。
正确的查询语句
CourseRun.objects.filter(course__category_set__id__in=[1, 2])
为什么这样写?
- 当多对多关系定义在
Category侧时,Course对象的反向关联集合由related_name指定(这里是category_set),代表该课程所属的所有分类。 - 查询时我们需要沿着
CourseRun -> course -> category_set的路径,通过分类ID的__in条件,筛选出关联的CourseRun记录。
补充说明
如果当时没有显式设置related_name,Django会默认用category_set作为反向关联名称(模型名小写加_set),所以这个查询写法依然适用。要是后续修改了related_name,只需要把查询里的category_set替换成新名称就行。
内容的提问来源于stack exchange,提问作者ehsan ahmadi
相关产品推荐
相关产品推荐

