2010-11-30 8 views
0

私が作っていた場合:その後、質問(クエリセット)

queryset=User.objects.all() 
lst=list(queryset) 

print lst[2].first_name 

は、それがデータベースからまたはメモリから2番目の要素のfirst_nameを取るのでしょうか?

答えて

4

list(queryset)を呼び出すと、データベース内のクエリが評価され、メモリに格納されます。したがって、print[2].first_nameはdbを再度ヒットしませんが、メモリ内のリストから引き出します。

+1

@Pol:あなたはそれについて考えるなら、他のことはできません。一旦 'list'を呼び出すと、それはもはやクエリーセットではなく、リストです。リストはデータベースについて何も知らない。 –

+1

しかし、リストにはユーザーインスタンスが存在します。また、ユーザーインスタンスはModelクラスの継承オブジェクトです。そして、モデルクラスはデータベースとの関係が大変です。 – Pol

+0

はい、モデルは実際にはデータベースについても実際には何も知りません。モデルはクエリーセットによってデータベースから読み込まれ、それ自体を元に戻す方法を知っていますが、それ以外の方法では関連しません。 –