3

我有这样的模型

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 或原始查询中是否有可能。

4

1 回答 1

1

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

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

如果您希望组合查询,您应该使用select_related,在这种情况下,它将执行一个查询,其中包含四个连接到酒店、航班和城市(x2)表的查询。

于 2015-08-14T14:35:15.550 回答