Я пытаюсь сериализовать некоторые данные формы, чтобы я мог вставить их в скрытое поле, пока пользователь не будет готов отправить всю форму (подумайте о мастере).
Я пытаюсь это:
print simplejson.dumps(vehicle_form.cleaned_data)
Но я продолжаю получать ошибки вроде этого:
<VehicleMake: Honda> is not JSON serializable
На самом деле мне просто нужно, чтобы вывести PK для "Honda".
Это не 'либо не работает:
print serializers.serialize('json', vehicle_form.cleaned_data)
Дает:
'str' object has no attribute '_meta'
Предположительно, потому что он перебирает ключи, которые являются строками, тогда как я думаю, что он ожидает набор запросов, который я неесть.
Так как мне это сделать?
Хорошо, пока я придумал это:
from django.utils.simplejson import JSONEncoder, dumps, loads
from django.utils.functional import curry
from django.db.models import Model
from django.db.models.query import QuerySet
from django.core.serializers import serialize
class DjangoJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, Model):
return obj.pk
elif isinstance(obj, QuerySet):
return loads(serialize('json', obj, ensure_ascii=False))
return JSONEncoder.default(self, obj)
json_encode = curry(dumps, cls=DjangoJSONEncoder)
json_decode = loads
На основании ответов, которые янайдено [здесь] [1].Сейчас я пытаюсь это сделать:
json = json_encode(vehicle_form.cleaned_data)
data = json_decode(json)
vehicle = Vehicle(**data)
Первые две строки работают отлично, но третья приводит к исключению:
Cannot assign "3": "Vehicle.model" must be a "VehicleModel" instance.
Близость!Не знаю, как с этим справиться, хотя ...