首页 > 解决方案 > 为一个类实例预取多对多关系

问题描述

我想限制详细视图的查询。我想在较少的查询中访问一个类实例的多个多对多字段。似乎prefetch_related无法使用,get并且服务器会针对每个多对多字段访问他的数据库。

JobInstance = Job.objects.get(pk=id).prefetch_related('cities').prefetch_related('experience_level')

标签: pythondjangodjango-viewsdjango-orm

解决方案


可以通过重新排序来让它工作,例如:

job_instance = Job.objects.prefetch_related('cities', 'experience_level').get(pk=id)

A.prefetch_related(..)在 a 上定义QuerySet,当您执行 a 时,您将.get(..)获取对象,并且您不再使用查询集。

但对于单个对象,.prefetch_related(..)不会提高效率。毕竟,这里会做两个额外的查询来获取相关对象,和不预取一样多,然后再评估..prefetch_related(..)job_instance

.prefetch_related(..)因此,当您想要批量获取多个对象的相关对象时很有用。


推荐阅读