将Django F表达式用于多对多字段

时间:2019-12-28 16:27:21

标签: django django-models

我正在尝试编写一个Django查询,该查询将对集合B中是否包含外键字段A进行过滤。集合B是模型上的多对多字段,因此我正在使用{{ 3}}尝试将两者进行比较。实际查询具有更复杂的模型关系,并使用F-expressionsSubquery,但是由于OuterRefF表达式的特殊类型,可与{{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表达式的任何示例。它们不兼容吗?预先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

以下应该可以工作

Review.objects.filter(instructors=F('instructor'))

过滤“讲师”会在讲师表上创建一个联接,然后过滤联接,其中“讲师”外键等于讲师表中的联接条目。使用“ id”列可能会使它更清晰

Review.objects.filter(instructors__id=F('instructor_id'))