Django stellt Werkzeuge zur Verfügung, um Querysets zu serialisieren (django.core.serializers), aber wie sieht es mit der Serialisierung von Querysets aus, die sich in anderen Objekten befinden (z.B. Dictionaries)?
Ich möchte das folgende Wörterbuch serialisieren:
dictionary = { 'alfa': queryset1, 'beta': queryset2, }
Ich beschloss, dies zu tun, indem ich simplejson (wird mit django geliefert). Ich erweitert simplejson.JSONEncoder auf folgende Weise:
from django.utils import simplejson
from 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)
Dann tue ich es: simplejson.dumps( dictionary, cls=HandleQuerySets)
aber das zurückgegebene Wörterbuch sieht wie folgt aus:
{ "alfa": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]",
"beta": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]" }
Von Django generiertes JSON wird als String und nicht als JSON in das Wörterbuch eingefügt. Was mache ich falsch?