no es JSON serializable

Tengo el siguiente 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)) 

Pero me sale el siguiente error:

 [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 

Algunas ideas ?

Añadiré una respuesta un poco más detallada.

Vale la pena señalar que el método QuerySet.values_list() no devuelve realmente una lista, sino un objeto de tipo django.db.models.query.ValuesListQuerySet , para mantener el objective de Django de una evaluación perezosa, es decir, la consulta de DB requerida para generar la ‘lista’ no se realiza realmente hasta que se evalúa el objeto

Sin embargo, un tanto irritante, este objeto tiene un método __repr__ personalizado que lo hace ver como una lista cuando se imprime, por lo que no siempre es obvio que el objeto no sea realmente una lista.

La excepción en la pregunta se debe al hecho de que los objetos personalizados no se pueden serializar en JSON, por lo que primero tendrá que convertirlo en una lista, con …

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

… entonces puedes convertirlo a JSON con …

 json_data = json.dumps(my_list) 

También tendrás que colocar los datos JSON resultantes en un objeto HttpResponse , que, al parecer , debería tener un Content-Type de application/json , con …

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

… que luego puede regresar de su función.

 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") 

arreglado el problema

También el mimetype es importante.