0

私はモデルを持っていて、クエリを実行しています:

my_objects = Model.objects.filter(user = request.user)

今私がやっているmy_objectsの上に:

obj = my_objects.get(user = x )

.get over my_objectsがデータベースへの別のクエリを生成せず、フィルター出力でのみ機能するかどうかを理解しようとしていますか?または、別のクエリを生成します。

4

1 に答える 1

1

isnt Userインスタンスの場合Model、データベースに再度ヒットします。その場合、Userは関連オブジェクトであるため、データベースに再度ヒットしたくない場合は、select_related()を使用して、自分でフィルタリングしますobj

「外部キー関係を自動的に「追跡」し、クエリの実行時に追加の関連オブジェクトデータを選択します」

my_objects = Model.objects.select_related().filter(user = request.user)

詳細はこちらをご覧ください: https ://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

編集: djangoのQuerySetは怠惰であり、実際にはクエリセットを評価するまでデータベースにヒットしないことを忘れました。これらはクエリセットを評価するように強制するメソッドです: methods

于 2012-07-25T13:43:47.580 に答える