Как получить список полей для всех объектов в Django?

Я хочу получить список всех значений для одного поля из запроса в django. Например, у меня есть запрос пользователей, но вместо запроса (или списка) объектов пользователя, я хочу, чтобы список просто имена пользователей (строки). В некотором смысле это требует ограничить только один столбец данных.

Ответы

Ответ 1

Вы пробовали

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

Если вы проходите только в одном поле, вы также можете передать плоский параметр. Если True, это будет означать, что возвращаемые результаты - это одиночные значения, а не однострочные.

Ответ 2

Чтобы получить список имен пользователей:

>>> 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']

Ответ 3

Как вы написали:

"но не набор запросов (или список) пользовательских объектов"

Soulution выше по-прежнему набор запросов

usr_names = User.objects.all().values_list('username')

Это решение:

usr_names = [str(elem) for elem in list(User.objects.all().values_list('username'))]

Он вернет список строк