35

私はSOの周りに嗅ぎタバコを持っていて、これを見つけることができませんでしたが、それはここのどこかにあると確信しています。この潜在的な二重投稿についてお詫びします!

私がこのコードを持っている場合:

return Story.objects.filter(user=request.user.id).order_by('-create_date')

Storyには「description」フィールドがあり、そのdescriptionフィールドが欲しいだけで、dbが結果とともに他のものを送り返す必要はありません。クエリをそれだけに制限するにはどうすればよいですか?

つまり、このSQLを生成するにはどうすればよいですか。

select description from story where user_id = x order by create_date desc

(もちろん、xはrequest.user.id値です)

4

3 に答える 3

57

values()またはを使用しvalues_list()ます。

を使用するvalues()と、辞書のリストが表示されます (技術的にはValuesQuerySet)

instance = MyModel.objects.values('description')[0]
description = instance['description']

を使用するvalues_list()と、タプルのリストになります

instance = MyModel.objects.values_list('description')[0]
description = instance[0]

または、この場合のように値を 1 つだけ取得する場合は、flat=Truekwarg を使用しvalues_listて単純な値のリストを取得できます。

description = MyModel.objects.values_list('description', flat=True)[0]

公式ドキュメントを参照してください

于 2012-05-22T15:25:06.947 に答える
5

唯一の方法を使用してください。ドキュメントを読んでください

于 2012-05-22T15:26:24.093 に答える
0

クエリ セットが 1 つのオブジェクトのみを生成する場合はドキュメントに記載されているように、フィルターの代わりに get() を使用することをお勧めします。あなたが与えた名前から、user_idはすべてのユーザーで異なると思います。EDIT1:orderby句に気付きました。したがって、user_id が異なる場合、または pk を使用する場合は、このコードを使用することをお勧めします。

    description = story.objects.filter('description').get(user_id=x)
于 2014-08-18T20:16:45.797 に答える