【发布时间】:2011-09-13 11:34:01
【问题描述】:
我正在尝试序列化一些表单数据,以便将其填充到隐藏字段中,直到用户准备好提交整个表单(想想向导)。
我正在尝试这个:
print simplejson.dumps(vehicle_form.cleaned_data)
但我不断收到这样的错误:
<VehicleMake: Honda> is not JSON serializable
真的,我只需要它来输出“本田”的PK。
这也不起作用:
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)
前 2 行完美运行,但第 3 行导致异常:
Cannot assign "3": "Vehicle.model" must be a "VehicleModel" instance.
越来越近了!虽然不知道如何处理这个......
【问题讨论】:
标签: django json serialization