Конвертировать несколько наборов запросов в JSON в Django - PullRequest
1 голос
/ 11 марта 2012

Я задал связанный с этим вопрос ранее сегодня

В этом случае у меня есть 4 результата запроса:

action_count = Action.objects.filter(complete=False, onhold=False).annotate(action_count=Count('name'))
hold_count = Action.objects.filter(onhold=True, hold_criteria__isnull=False).annotate(action_count=Count('name'))
visible_tags = Tag.objects.filter(visible=True).order_by('name').filter(action__complete=False).annotate(action_count=Count('action'))
hidden_tags = Tag.objects.filter(visible=False).order_by('name').filter(action__complete=False).annotate(action_count=Count('action'))

Я бы хотел вернуть их в функцию ajax. Мне нужно преобразовать их в json, но я не знаю, как включить несколько наборов запросов в одну строку json.

Ответы [ 2 ]

2 голосов
/ 10 января 2013

Я знаю, что этот поток старый, но использование simplejson для преобразования моделей django не работает во многих случаях, таких как десятичные дроби (как отмечено в rebus выше).

Как указано в документации по django, сериализатор выглядитлучший выбор.

Среда сериализации Django предоставляет механизм для «перевода» моделей Django в другие форматы.Обычно эти другие форматы основаны на тексте и используются для отправки данных Django по проводам, но сериализатор может обрабатывать любой формат (текстовый или нет).

DjangoДокументы по сериализации

1 голос
/ 11 марта 2012

Вы можете использовать модуль Django simplejson. Этот код еще не проверен!

from django.utils import simplejson
dict = {
    'action_count': list(Action.objects.filter(complete=False, onhold=False).annotate(action_count=Count('name')).values()),
    'hold_count': list(Action.objects.filter(onhold=True, hold_criteria__isnull=False).annotate(action_count=Count('name')).values()),
    ...
}
return HttpResponse( simplejson.dumps(dict) )

Я буду тестировать и переписывать код по мере необходимости, когда у меня будет время, но это должно помочь вам начать работу.

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