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 テーブルの最後の 2 つのクエリを 1 つに減らすことはできますか? 私は ORM に多くを求めすぎているのではないかと思いますが、ORM または raw-query でそれが可能かどうかを知りたいだけです。

4

1 に答える 1

1

prefetch_related は常に個別のクエリを実行します-ドキュメントから:

prefetch_related(**lookups) - 指定された各ルックアップの関連オブジェクトを単一のバッチで自動的に取得する QuerySet を返します。

クエリを組み合わせる場合は、select_relatedを使用する必要があります。この例では、hotel、flight、city(x2) テーブルへの 4 つの結合を含む単一のクエリを実行します。

于 2015-08-14T14:35:15.550 に答える