Django предоставляет инструменты для сериализации наборов запросов (django.core.serializers), но как насчет сериализации наборов запросов, находящихся внутри других объектов (например, словарей)?
Я хочу сериализовать следующий словарь:
dictionary = { 'alfa': queryset1, 'beta': queryset2, }
Я решил сделать это, используя simplejson (поставляется с django).Я расширил simplejson.JSONEncoder следующим образом:
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)
Затем я делаю: simplejson.dumps( dictionary, cls=HandleQuerySets)
, но возвращенный диктионер выглядит так:
{ "alfa": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]",
"beta": "[{\"pk\": 1, \"model\": \"someapp.somemodel\", \"fields\": {\"name\": \"alfa\"}}]" }
Djangoгенерируемый JSON вставляется в словарь в виде строки, а не JSON.Что я делаю не так?