私はモデルを持っていて、クエリを実行しています:
my_objects = Model.objects.filter(user = request.user)
今私がやっているmy_objectsの上に:
obj = my_objects.get(user = x )
.get over my_objectsがデータベースへの別のクエリを生成せず、フィルター出力でのみ機能するかどうかを理解しようとしていますか?または、別のクエリを生成します。
私はモデルを持っていて、クエリを実行しています:
my_objects = Model.objects.filter(user = request.user)
今私がやっているmy_objectsの上に:
obj = my_objects.get(user = x )
.get over my_objectsがデータベースへの別のクエリを生成せず、フィルター出力でのみ機能するかどうかを理解しようとしていますか?または、別のクエリを生成します。
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