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