JSON сериализует Django Queryset с вызываемыми значениями. Что-то не так с моим подходом? - PullRequest
7 голосов
/ 13 августа 2011

Вот проблема: сериализатор Django не поддерживает словари, а simplejson не поддерживает наборы запросов Django.См. JSON-сериализация моделей Django с simplejson

. Мне было интересно, что-то не так с моим решением.У меня есть что-то вроде:

people = People.objects.all().values('name', 'id')
json.dumps(list(people))

Я все еще новичок в Python / Django.Является ли приведение QuerySet к списку плохой идеей?Более эффективно использовать DjangoJSONEncoder, предложенный в другой теме?

1 Ответ

13 голосов
/ 24 августа 2011

По моему мнению, ваше решение абсолютно корректно и очень чисто.

Если вам нужен список списков (вместо списка словарей), вы также можете использовать:

from django.utils import simplejson

people = People.objects.all().values_list('name', 'id')
simplejson.dumps(list(people))

Иногда, когда вывод json очень сложный, мы обычно используем шаблон json с функцией * render_to_string *, например:

context = {'people': People.objects.all().values('name', 'id')}
render_to_string('templates/people.json', context, context_instance=RequestContext(request))

Шаблон people.json может быть:

[
 {% for person in people %}
    {"name": {{ person.name }}, "id": {{ person.id }} }
    {% if not forloop.last %} , {% endif %}
 {% endfor %}
]

Но использование шаблонов зарезервировано для более сложных случаев, чем у вас. Я думаю, что для более простых задач хорошим решением является использование функции simplejson.dumps.

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