在我的Django后端db中,结果存储在结果列中,结果本身如下所示:
result = [
{"pod_name": "kafka-9", "resolution_ms": 60000,"value": 420.85},
{"pod_name": "kafka-3", "resolution_ms": 60000, "value": 418.0},
...
]
当我从过滤器做get_results时
results = DjangoCeleryResultsTaskresult.objects.filter(task_id=taskname).values('result')
just_res = list(results)[0].values()
just_res是一个字典值,它将我原来的列表转换为一个巨大的字符串。
dict_values(['[{"pod_name": "kafka-9", "resolution_ms": 60000, "value": 420.85}, {"pod_name": "kafka-3", "resolution_ms": 60000, "value": 418.0}]'])
但是,我希望我的just_res是一个嵌套字典列表,就像它存储在db中一样。
我试过:
service_results = list(just_res)[0]
但这只会转换一个字符串,并将该字符串转换为一个列表,这是另一个噩梦,不能只使用list()方法。
你也能帮我弄清楚吗?
将string(just_res)的值转换为list?
或
中提取出来的方法
总之,不确定为什么django筛选对象值(),我只能以字符串的形式获得结果,而不是原始的数据类型。我是用错了还是其他方法?
谢谢!
发布于 2022-10-04 17:50:46
从外观上看,您有一个存储所需数据的models.JSONField()。以list of dictionaries
的形式从API中获取这些数据是非常直接的。您提到了一个list of nested dictionaries
,但是在result
列中,您没有nested dictionary
,这与在API响应中获取它有什么不同。
如果您正在使用rest_framework
,那么您所需要的就是一个model serializer
。
from rest_framework import serializers
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model = DjangoCeleryResultsTaskresult #import this model
fields = ["result"]
现在,在视图中,使用上面的序列化程序。没有必要使用values
、list
等。序列化程序优雅地处理了所有的事情。
return Response(
ResultSerializer(DjangoCeleryResultsTaskresult.objects.filter(
task_id=taskname), many=True).data
)
https://stackoverflow.com/questions/73951080
复制相似问题