我正在尝试编写一个Django查询,该查询将对集合B中是否包含外键字段A进行过滤。集合B是模型上的多对多字段,因此我正在使用{{ 3}}尝试将两者进行比较。实际查询具有更复杂的模型关系,并使用F-expressions和Subquery
,但是由于OuterRef
是F
表达式的特殊类型,可与{{1 }}对象,有关如何将Subquery
表达式用于多对多字段的任何指导都将非常有帮助。这是我们正在使用的简化模型:
F
class Instructor(models.Model):
name = models.CharField()
class Review(models.Model):
instructor = models.ForeignKey(Instructor)
instructors = models.ManyToManyField(Instructor)
不一定位于instructor
的地方
我们要执行的查询:
instructors
在Google和StackOverflow上进行了大量搜索之后,我找不到用于多对多字段的F表达式的任何示例。它们不兼容吗?预先感谢您的帮助!
答案 0 :(得分:1)
以下应该可以工作
Review.objects.filter(instructors=F('instructor'))
过滤“讲师”会在讲师表上创建一个联接,然后过滤联接,其中“讲师”外键等于讲师表中的联接条目。使用“ id”列可能会使它更清晰
Review.objects.filter(instructors__id=F('instructor_id'))