如何将Django QuerySet转换为dicts列表?
我怎样才能将Django QuerySet转换成一个列表的字典? 我还没有find答案,所以我想知道如果我错过了某种人人共用的帮助function。
使用.values()
方法:
>>> Blog.objects.values() [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}], >>> Blog.objects.values('id', 'name') [{'id': 1, 'name': 'Beatles Blog'}]
注意:结果是一个查询集,其行为像一个列表,但实际上不是一个列表的实例。 使用list(Blog.objects.values(…))
如果你真的需要一个list
的实例。
.values()
方法将返回一个types为ValuesQuerySet
的结果,这通常是大多数情况下需要的。
但是,如果您愿意,可以使用Python列表理解将ValuesQuerySet
转换为本地Python列表,如下例所示。
result = Blog.objects.values() # return ValuesQuerySet object list_result = [entry for entry in result] # converts ValuesQuerySet into Python list return list_result
如果你正在编写unit testing,并且需要声明一个函数的期望返回值与实际返回值相匹配,那么expected_result
和actual_result
必须是相同types(例如字典)。
actual_result = some_function() expected_result = { # dictionary content here ... } assert expected_result == actual_result
你并没有完全定义字典应该是什么样子,但很可能你指的是QuerySet.values()
。 从官方的django文档 :
返回一个
ValuesQuerySet
– 一个QuerySet
子类,当用作可迭代的时候返回字典,而不是模型实例对象。这些字典中的每一个都表示一个对象,其中键对应于模型对象的属性名称。
您可以使用您从Django模型字段获得的字典上的values()
方法进行查询,然后可以通过索引值轻松访问每个字段。
像这样称呼它 –
myList = dictOfSomeData.values() itemNumberThree = myList[2] #If there's a value in that index off course...
如果你出于某种原因需要本地数据types(例如JSON序列化),这是我的快速“n”肮脏的方式来做到这一点:
data = [{'id': blog.pk, 'name': blog.name} for blog in blogs]
正如你所看到的build立列表里面的字典不是真的干,所以如果有人知道更好的办法…