Как вы управляете выходными значениями - строка в 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().

Можете ли вы помочь мне разобраться в любом из них?

  1. преобразуйте значения string(just_res) в список?

или

  1. Способ получения результатов 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
})
Вернуться на верх