如何检索Django中所有对象的字段列表?

如何检索Django中所有对象的字段列表?,django,Django,我想从django中的查询中检索一个字段的所有值的列表。例如,我有一个用户查询,但我想要的不是用户对象的查询集(或列表),而是一个仅包含用户名(字符串)的列表。从某种意义上说,这是要求仅限于一列数据。要获取用户名列表: >>> User.objects.all().values('username') >>> [{'username': u'u1'}, {'username': u'u2'}] >>> User.objects.all().

我想从django中的查询中检索一个字段的所有值的列表。例如,我有一个用户查询,但我想要的不是用户对象的查询集(或列表),而是一个仅包含用户名(字符串)的列表。从某种意义上说,这是要求仅限于一列数据。

要获取用户名列表:

>>> 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']
使用
值\u列表

>>> usr_names = User.objects.all().values_list('username')
>>> [u[0] for u in usr_names]
>>> [u'u1', u'u2']
你试过了吗

User.objects.all().values_list('username', flat=True) 
如果只传入单个字段,还可以传入展开参数。如果为True,则意味着返回的结果是单个值,而不是一个元组

正如你所写的:

“但不是用户对象的查询集(或列表)”

静止queryset上方的溶液

usr_names = User.objects.all().values_list('username')
此解决方案:

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

它将返回字符串列表

获取属性对象列表的最简单方法是首先使用
values\u list
单独获取该属性的查询集,然后使用
set()
将django查询集转换为python集,最后使用
list()
将其转换为列表

在您的场景中:

user\u names=list(set(user.objects.all().values\u list('username',flat=True)))

关闭;但是这给了我一个字典列表(实际上是一个ValuesQuerySet,但是…)如果我使用values\u list,我会得到一个更接近的元组列表,但是我真的想要一个直接的列表,例如[u'u1',u'u2'],你是对的。我编辑了答案。我更喜欢values()顺便说一句,不知道为什么,只是一个偏好。希望有帮助。你不能简单地将值的输出转换为list()而不是使用理解吗?正如在
usr\u names=list(User.objects.all().values\u list('username',flat=True))
中一样,它实际上返回一个QuerySet对象,而不是列表,因此不支持项目分配。我这边发生了一些有趣的事情。我想从不是
User
对象的东西中获取所有字段的列表。我把它放进去,得到了一个
django.core.exceptions.FieldError:无法将关键字“”解析到字段中。选项包括:
error,但仍然显示该模型的所有不同字段。。。。我要我能得到的。