如何过滤和访问 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 中的多对多字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在django中将QuerySet过滤到每个组的最大成员?
如何过滤 Django QuerySet 的相关字段“全部”或“无”
Django QuerySet - 如何“禁用”以前的过滤值
Django Admin:获取根据 GET 字符串过滤的 QuerySet,与更改列表中看到的完全一样?