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