Зачем сериализовать QuerySet я получаю строку? - PullRequest
1 голос
/ 01 апреля 2020

Я использую функцию js для получения некоторых данных из моих django моделей. Конкретно, я хочу получить последнее значение от своих датчиков.

Я делаю следующее,

from django.core import serializers
def getData(request):
    ctx = {}
    if request.method == 'POST':
        select = int(request.POST['Select'])

        last_val = DevData.objects.order_by('dev_id','-data_timestamp').distinct('dev_id')
        data = serializers.serialize('json', last_val)
        print(data)
        print('****************')
        print(data[0]) # I just obtain a "[" then is a string not a list
        ctx = {'Select':data}

    return JsonResponse(ctx)

Мой вопрос: почему вывод является строкой? Как я могу преобразовать его в Json объект и затем передать его в мою js функцию?

Большое спасибо !!

1 Ответ

2 голосов
/ 01 апреля 2020

Вы получаете строку, потому что JSON - текстовый формат. Например, вы можете использовать json.loads, чтобы преобразовать его обратно в список словарей:

from json import loads as <b>jsonloads</b>
from django.core import serializers

def getData(request):
    ctx = {}
    if request.method == 'POST':
        select = int(request.POST['Select'])

        last_val = DevData.objects.order_by('dev_id','-data_timestamp').distinct('dev_id')
        data = <b>jsonloads(</b>serializers.serialize('json', last_val)<b>)</b>
        ctx = {'Select':data}
    return JsonResponse(ctx)

Сериализация JSON в Django - это просто специальная JsonEncoder с именем DjangoJSONEncoder [GitHub] , который имеет некоторые особые случаи для объекта datetime, et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...