Не является сериализуемым JSON

У меня есть следующий ListView

import json
class CountryListView(ListView):
     model = Country

    def render_to_response(self, context, **response_kwargs):

         return json.dumps(self.get_queryset().values_list('code', flat=True))

Но я получаю следующую ошибку:

[u'ae', u'ag', u'ai', u'al', u'am', 
u'ao', u'ar', u'at', u'au', u'aw', 
u'az', u'ba', u'bb', u'bd', u'be', u'bg', 
u'bh', u'bl', u'bm', u'bn', '...(remaining elements truncated)...'] 
is not JSON serializable

Любые идеи?

Ответ 1

Я добавлю немного более подробный ответ.

Стоит отметить, что метод QuerySet.values_list() фактически не возвращает список, а объект типа django.db.models.query.ValuesListQuerySet, чтобы для поддержания цели Django для ленивой оценки, то есть запрос БД, необходимый для создания "списка", фактически не выполняется до тех пор, пока объект не будет оценен.

Несколько раздражающе, однако, этот объект имеет собственный метод __repr__, который делает его похожим на список при распечатке, поэтому не всегда очевидно, что объект не является действительно списком.

Исключение в вопросе вызвано тем, что пользовательские объекты не могут быть сериализованы в JSON, поэтому сначала вам нужно будет преобразовать его в список,...

my_list = list(self.get_queryset().values_list('code', flat=True))

... тогда вы можете преобразовать его в JSON с помощью...

json_data = json.dumps(my_list)

Вам также придется разместить полученные данные JSON в объекте HttpResponse, который, очевидно, должен иметь Content-Type of application/json, с...

response = HttpResponse(json_data, content_type='application/json')

..., который вы можете вернуть из своей функции.

Ответ 2

class CountryListView(ListView):
     model = Country

    def render_to_response(self, context, **response_kwargs):

         return HttpResponse(json.dumps(list(self.get_queryset().values_list('code', flat=True))),mimetype="application/json") 

исправлена ​​проблема

также важна миметик.