如何将 Django QuerySet 转换为字典列表?

新手上路,请多包涵

如何将 Django QuerySet 转换为字典列表?我还没有找到这个问题的答案,所以我想知道我是否缺少某种每个人都使用的通用辅助函数。

原文由 Mridang Agarwalla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用 .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'}]

注意:结果是一个 QuerySet ,它主要表现得像一个列表,但实际上不是 list 的一个实例。使用 list(Blog.objects.values(…)) 如果你真的需要 list 的实例。

原文由 David Wolever 发布,翻译遵循 CC BY-SA 3.0 许可协议

.values() 方法将返回类型为 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

如果您正在编写单元测试并且需要断言函数的预期返回值与实际返回值匹配,我发现以上内容会有所帮助,在这种情况下 expected_resultactual_result 必须是相同类型(例如字典)。

 actual_result = some_function()
expected_result = {
    # dictionary content here ...
}
assert expected_result == actual_result

原文由 arimbun 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题