使用の違いは何ですか:
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()
ためです。QuerySet
Blabla
.values()
「モデル未満」を提供します。返されるアイテムは、完全なモデルよりも辞書に近いため、モデル属性を取得できませんが、完全なモデルを初期化する必要もありません。
.only()
SQLのフィールドリストを関心のある特定のフィールドに制限しますが、それでも完全なモデルを初期化します。他のフィールドにアクセスするまで(あるとしても)、他のフィールドのロードを延期します。
values()
戻り値QuerySet
-繰り返されると、モデルを表すディクショナリが返されます。モデルオブジェクトは返しません。
only()
は、返される列を制限し、それらの列のみがすぐに返されるようにする方法です。これが、 「通常」ではなくdefer()
「言う」の反対と呼ばれることがある理由です。さらにチェーンできるaを返します。SELECT foo, bar, zoo FROM
SELECT [all columns] FROM
QuerySet