По моему мнению, ваше решение абсолютно корректно и очень чисто.
Если вам нужен список списков (вместо списка словарей), вы также можете использовать:
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.