如何过滤和访问 Django QuerySet 中的多对多字段?

Posted

技术标签:

【中文标题】如何过滤和访问 Django QuerySet 中的多对多字段?【英文标题】:How to filter and access ManyToMany fields in a Django QuerySet? 【发布时间】:2018-10-19 13:36:12 【问题描述】:

假设我有以下具有多对多关系的模型:

class City(models.Model):
    name = models.CharField(max_length=100)

class Course(models.Model):
    name = models.CharField(max_length=100)
    cities = models.ManyToManyField(City)

现在我想过滤给定城市中具有给定名称的课程:

courses = Course.objects.filter(name='Course1', cities__name='City1')

是否可以通过courses QuerySet 访问City 字段?在这个例子中,是否有可能只从courses 得到'City1'

提前致谢。

【问题讨论】:

【参考方案1】:

您可以使用prefetch_related 和Prefetch object 来执行此操作。

city1 = City.objects.filter(name='City1')
courses = Course.objects.filter(name='Course1', cities__name='City1').prefetch_related(
    Prefetch('cities', queryset=city1)
)

【讨论】:

以上是关于如何过滤和访问 Django QuerySet 中的多对多字段?的主要内容,如果未能解决你的问题,请参考以下文章