29

使用の違いは何ですか:

Blabla.objects.values('field1', 'field2', 'field3')

Blabla.objects.only('field1', 'field2', 'field3')
4

4 に答える 4

26

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

于 2012-08-15T18:19:08.587 に答える
15

.values()「モデル未満」を提供します。返されるアイテムは、完全なモデルよりも辞書に近いため、モデル属性を取得できませんが、完全なモデルを初期化する必要もありません。

.only()SQLのフィールドリストを関心のある特定のフィールドに制限しますが、それでも完全なモデルを初期化します。他のフィールドにアクセスするまで(あるとしても)、他のフィールドのロードを延期します。

于 2012-08-15T18:17:50.750 に答える
3

values()戻り値QuerySet-繰り返されると、モデルを表すディクショナリが返されます。モデルオブジェクトは返しません。

only()は、返される列を制限し、それらの列のみがすぐに返されるようにする方法です。これが、 「通常」ではなくdefer()「言う」の反対と呼ばれることがある理由です。さらにチェーンできるaを返します。SELECT foo, bar, zoo FROMSELECT [all columns] FROMQuerySet

于 2012-08-15T18:18:55.453 に答える