Как вы управляете выходными значениями - строка в django
В моем бэкенде Django результаты хранятся в колонке result, а сам результат выглядит следующим образом:
result = [
{"pod_name": "kafka-9", "resolution_ms": 60000,"value": 420.85},
{"pod_name": "kafka-3", "resolution_ms": 60000, "value": 418.0},
...
]
<
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) в список?
или
- Способ получения результатов django в виде списка из базы данных?
Вообще, не уверен, почему django filter objects values(), я могу получить результаты только в виде строки, а не исходного типа данных. Я использую его неправильно или есть другой подход?
Спасибо!
Судя по всему, у вас есть models.JSONField(), где вы храните необходимые данные. Получить эти данные из API в виде list of dictionaries
довольно просто. Вы упомянули 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({
"results": ResultSerializer(DjangoCeleryResultsTaskresult.objects.filter(
task_id=taskname), many=True).data
})