赞
踩
prefetch_related()
prefetch_related(*lookups)
返回一个QuerySet
,该QuerySet
将在单个批处理中为每个指定的查找自动检索相关对象。
这与select_related
的目的类似,因为这两种方法都是为了阻止由于访问相关对象而导致的大量数据库查询,但策略完全不同。
select_related
的工作原理是创建一个SQL连接并在select语句中包含相关对象的字段。因此,select_related
将获取同一数据库查询中的相关对象。但是,为了避免由于跨“多”关系连接而导致的结果集更大,select_related
仅限于单值关系、外键关系和一对一关系。
而prefetch_related
对每个关系进行单独的查找,并在Python中执行“joining”。这使得它可以预取多对多和多对一对象,除了select_related
支持的外键和一对一关系之外,还可以预取多对多和多对一对象。它还支持GenericRelation和GenericForeignKey的预取,但是,它必须限制为一组相同的结果。例如,只有当查询限制为一个ContentType时,才支持预取GenericForeignKey引用的对象。
例如,假设您有以下模型:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。