如何将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_resultactual_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立列表里面的字典不是真的干,所以如果有人知道更好的办法…