使用の違いは何ですか:
Blabla.objects.values('field1', 'field2', 'field3')
と
Blabla.objects.only('field1', 'field2', 'field3')
使用の違いは何ですか:
Blabla.objects.values('field1', 'field2', 'field3')
と
Blabla.objects.only('field1', 'field2', 'field3')
Blablaあなたの質問にフィールドがあると仮定するとfield4、
Blabla.objects.only('field1', 'field2', 'field3')[0].field4
そのオブジェクトの値を返しますfield4(その情報を取得するための新しいデータベース クエリを使用)。
Blabla.objects.values('field1', 'field2', 'field3')[0].field4
あげる
AttributeError: 'dict' object has no attribute 'field4'
これは、モデル インスタンス ( ) ではなく、基本的に辞書のリストである辞書を返す を返す.values()ためです。QuerySetBlabla
.values()「モデル未満」を提供します。返されるアイテムは、完全なモデルよりも辞書に近いため、モデル属性を取得できませんが、完全なモデルを初期化する必要もありません。
.only()SQLのフィールドリストを関心のある特定のフィールドに制限しますが、それでも完全なモデルを初期化します。他のフィールドにアクセスするまで(あるとしても)、他のフィールドのロードを延期します。
values()戻り値QuerySet-繰り返されると、モデルを表すディクショナリが返されます。モデルオブジェクトは返しません。
only()は、返される列を制限し、それらの列のみがすぐに返されるようにする方法です。これが、 「通常」ではなくdefer()「言う」の反対と呼ばれることがある理由です。さらにチェーンできるaを返します。SELECT foo, bar, zoo FROMSELECT [all columns] FROMQuerySet