type simple serialize not example dumps python django json serialization django-class-based-views

python - simple - <Objeto Django> no es JSON serializable



simple json python (5)

Descubrí que esto se puede hacer bastante simple usando el método ".values", que también proporciona campos con nombre:

result_list = list(my_queryset.values(''first_named_field'', ''second_named_field'')) return HttpResponse(json.dumps(result_list))

"list" se debe usar para obtener datos como iterables, ya que el tipo "value queryset" es solo un dict si se toma como iterable.

Documentación: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values

Tengo el siguiente código para serializar el conjunto de preguntas;

def render_to_response(self, context, **response_kwargs): return HttpResponse(json.simplejson.dumps(list(self.get_queryset())), mimetype="application/json")

Y a continuación está mi get_querset()

[{''product'': <Product: hederello ()>, u''_id'': u''9802'', u''_source'': {u''code'': u''23981'', u''facilities'': [{u''facility'': {u''name'': {u''fr'': u''G/xe9n/xe9ral'', u''en'': u''General''}, u''value'': {u''fr'': [u''bar'', u''r/xe9ception ouverte 24h/24'', u''chambres non-fumeurs'', u''chambres familiales'',.........]}]

Lo cual necesito serializar. Pero dice que no puede serializar el <Product: hederello ()> . Porque la lista está compuesta de ambos objetos django y dicts. Algunas ideas ?


Desde la versión 1.9 Manera más fácil y oficial de obtener json

from django.http import JsonResponse from django.forms.models import model_to_dict return JsonResponse( model_to_dict(modelinstance) )


La forma más fácil es usar un JsonResponse .

Para un conjunto de consulta, debe pasar una lista de los values para ese conjunto de consulta, así:

from django.http import JsonResponse queryset = YourModel.objects.filter(some__filter="some value").values() return JsonResponse({"models_to_return": list(queryset)})


Primero agregué un método to_dict a mi modelo;

def to_dict(self): return {"name": self.woo, "title": self.foo}

Entonces tengo esto;

class DjangoJSONEncoder(JSONEncoder): def default(self, obj): if isinstance(obj, models.Model): return obj.to_dict() return JSONEncoder.default(self, obj) dumps = curry(dumps, cls=DjangoJSONEncoder)

y al final use esta clase para serializar mi queryset.

def render_to_response(self, context, **response_kwargs): return HttpResponse(dumps(self.get_queryset()))

Esto funciona bastante bien


simplejson y json no funcionan bien con los objetos django.

Los serializers incorporados de Django solo pueden serializar los conjuntos de consultas llenos de objetos django:

data = serializers.serialize(''json'', self.get_queryset()) return HttpResponse(data, content_type="application/json")

En su caso, self.get_queryset() contiene una mezcla de objetos django y dicts dentro.

Una opción es deshacerse de las instancias de modelo en self.get_queryset() y reemplazarlas por dicts usando model_to_dict :

from django.forms.models import model_to_dict data = self.get_queryset() for item in data: item[''product''] = model_to_dict(item[''product'']) return HttpResponse(json.simplejson.dumps(data), mimetype="application/json")

Espero que ayude.