python - Serializing objects containing django querysets -
django provides tools serialize querysets (django.core.serializers), serializing querysets living inside other objects (like dictionaries)?
i want serialize following dictionary:
dictionary = { 'alfa': queryset1, 'beta': queryset2, }
i decided using simplejson (comes django). extended simplejson.jsonencoder following way:
from django.utils import simplejson django.core import serializers class handlequerysets(simplejson.jsonencoder): """ simplejson.jsonencoder extension: handle querysets """ def default(self, obj): if isinstance(obj, queryset): return serializers.serialize("json", obj, ensure_ascii=false) return simplejson.jsonencoder.default(self, obj)
then do: simplejson.dumps( dictionary, cls=handlequerysets)
, returned dicionary looks this:
{ "alfa": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]", "beta": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]" }
django-generated json inserted dictionary string, not json. doing wrong?
the correct way be:
from django.utils import simplejson django.core import serializers django.db.models.query import queryset class handlequerysets(simplejson.jsonencoder): """ simplejson.jsonencoder extension: handle querysets """ def default(self, obj): if isinstance(obj, queryset): return serializers.serialize("python", obj, ensure_ascii=false) return simplejson.jsonencoder.default(self, obj)
because serializers.serialize("json", [...])
returns string ; if ask python
serializer, dictionnary, , json encodes whatever returned encoder's default
method. @ json documentation details.
you have handle more types in encoder class (such datetime objects), idea.
Comments
Post a Comment