45

djangoのクエリから1つのフィールドのすべての値のリストを取得したいと思います。たとえば、ユーザーのクエリがありますが、ユーザーオブジェクトのクエリセット(またはリスト)ではなく、ユーザー名(文字列)だけのリストが必要です。ある意味で、これはデータの1列のみに制限することを求めています。

4

4 に答える 4

71

やってみました

list(User.objects.all().values_list('username', flat=True)) 

1 つのフィールドのみを渡す場合は、flat パラメーターを渡すこともできます。True の場合、返される結果が 1 つのタプルではなく単一の値であることを意味します。さらに、リストにキャストすると、返される値がクエリセットではなくリストになります

于 2013-02-01T04:12:01.433 に答える
13

ユーザー名のリストを取得するには:

>>> User.objects.all().values('username')
>>> [{'username': u'u1'}, {'username': u'u2'}]

>>> User.objects.all().values_list('username')
>>> [(u'u1',), (u'u2',)]

文字列だけが必要な場合は、リスト内包表記がそのトリックを実行できます。

>>> usr_names = User.objects.all().values('username')
>>> [u['username'] for u in usr_names]
>>> [u'u1', u'u2']

使用values_list:

>>> usr_names = User.objects.all().values_list('username')
>>> [u[0] for u in usr_names]
>>> [u'u1', u'u2']
于 2013-02-01T03:14:14.993 に答える