2017-07-14 4 views
1

私は複数のフィールドで構成されるDjangoモデルを持っています。私は1つだけを選択したいと思う。Djanoの唯一の()はまだすべての既存のフィールドを選択します

私はonly()を使っていますが、ドキュメントによれば、ここにはwoodAskedフィールドしか返されません。しかし返されたクエリーセットには、まだPaintingモデルの各フィールドが含まれます。

>>> a = Painting.objects.only('woodAsked') 
>>> serializers.serialize("json",a)[1:200] 
'{"model": "binaryQuestionApp.painting", "pk": 3, "fields": {"name": "Getty00052501.jpg", "objectNumber": "00052501.jpg", "collection": "Getty", "title": "pretty after al", "woodAsked": 0, "woodYes": ' 

「woodAsked」フィールドのみを選択するにはどうすればよいですか?

答えて

2

あなたは、valuesまたは

a = Painting.objects.values('woodAsked') 
a = Painting.objects.values_list('woodAsked', flat=True) 

values_listのみ延期他のフィールドを探している彼らは、最初のクエリに返されないようにそれを作る - まだ存在して

+1

これは私が探していたまさにでした。私は分かりません。 'a = Painting.objects.only( 'woodAsked')'では、 'a'は初期クエリを表していませんか?私は 'woodAsked'フィールドだけがそこにあると思うでしょう。 –

+1

@MitchellvanZuylen - 値を返すのに時間がかかる可能性がある配列フィールドを持つより複雑なモデルを想像してください。あなたは本当にそれらの値の必要性を持っていないので、あなたのクエリにそれらの値をフェッチする必要はありません。 'only'は余分なフェッチ時間を避けることを可能にします。 – Sayse

+4

@MitchellvanZuylen' .only() 'はまだモデルインスタンスを返しますが、最初にアクセスしたときにデータベースからフィールドをフェッチする記述子でロードされていないフィールドを置き換えます。これは高度な機能であり、非常に具体的なパフォーマンス調整にのみ役立ちます。あなたはそれを必要としません。 (あなたがあなたのアプリケーションを詳細にプロファイリングし、あなたがそれを必要としていると断言していない限り) – knbk

1

することができますvaluesまたはvalues_listを、使用

OR

あなただけがシリアライザにフィールド引数を指定することができ、フィールドのサブセットをシリアル化したい場合は、

data = serializers.serialize('json', a, fields=('woodAsked')) 
関連する問題