多个模型上的django prefetch_related

时间:2013-11-11 15:15:18

标签: sql django django-models django-orm

我有这样的模特

Model Trip:
  hotel: m2m_field to Hotel
  flight: m2m_field to Flight
Model Hotel:
  city: foreignkey to City
Model Flight:
  city: foreignkey to City

问题出在我做的时候

Trip.objects.prefetch_related('hotel__city', 'flight__city')

它会生成5个SQL查询:1个在旅途中,1个在旅馆,1个在航班上,1个在城市从酒店结果,1个城市从航班结果。我可以将City表上的最后两个查询减少为1吗?我想我可能会对ORM提出太多要求,但只是想知道它是否可能在ORM或原始查询中。

1 个答案:

答案 0 :(得分:1)

prefetch_related将始终执行单独的查询 - 来自docs

  

prefetch_related(** lookups) - 返回一个QuerySet,它将在一个批处理中自动检索每个指定查找的相关对象。

如果您正在寻找合并查询,那么您应该使用select_related,在这种情况下,this question会执行一次查询,其中有四个连接到酒店,航班和city(x2)表。