You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将查询返回的字符串结果转为原列表类型?

解决Django查询Celery任务结果时的格式转换问题

问题说明

你的Django后端中,DjangoCeleryResultsTaskresult模型的result列存储的是列表嵌套字典格式的数据,但通过values('result')查询后,得到的是JSON格式的字符串,无法直接作为Python列表使用。


方案一:将字符串转为列表嵌套字典

数据库里存的是JSON序列化后的字符串,直接用Python标准库的json模块解析即可:

import json

# 提取出字符串内容
service_results_str = list(just_res)[0]
# 解析为Python列表嵌套字典
service_results = json.loads(service_results_str)

执行后service_results就会恢复成你需要的列表格式。


方案二:直接查询获取原生Python类型

不要用values()方法,直接查询模型实例并访问result属性,Celery的结果模型会自动帮你完成反序列化:

# 获取单个任务结果实例
task_result = DjangoCeleryResultsTaskresult.objects.filter(task_id=taskname).first()
if task_result:
    # 直接得到列表嵌套字典格式的结果
    service_results = task_result.result

为什么values()返回字符串?

values()方法是直接从数据库读取原始存储值,不会触发模型字段的反序列化逻辑。Celery在存储任务结果时,会把Python对象序列化成JSON字符串存入数据库,所以values('result')拿到的就是这个原始字符串。而直接访问模型实例的result属性时,字段的内置逻辑会自动把字符串反序列化为对应的Python对象。

内容的提问来源于stack exchange,提问作者James Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:35:23