Как получить список полей для всех объектов в 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'))]
Он вернет список строк