我有这样的模特
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或原始查询中。
答案 0 :(得分:1)
prefetch_related将始终执行单独的查询 - 来自docs:
prefetch_related(** lookups) - 返回一个QuerySet,它将在一个批处理中自动检索每个指定查找的相关对象。
如果您正在寻找合并查询,那么您应该使用select_related,在这种情况下,this question会执行一次查询,其中有四个连接到酒店,航班和city(x2)表。