Django模型不序列化阿贾克斯
-
12-09-2019 - |
题
我有我使用与AJAX进行实验的简单视图。
def get_shifts_for_day(request,year,month,day):
data= dict()
data['d'] =year
data['e'] = month
data['x'] = User.objects.all()[2]
return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')
此返回以下结果:
TypeError at /sched/shifts/2009/11/9/
<User: someguy> is not JSON serializable
如果我取出数据[“X”]线,使得我不引用它的工作原理的任何模型,并返回这样的:
{"e": "11", "d": "2009"}
为什么不能simplejson解析我的Django缺省的车型之一?我与我使用任何型号相同的行为。
解决方案
您只需要添加,在你.dumps
呼叫,default=encode_myway
说法让simplejson
知道做什么,当你通过它的数据,其类型,它不知道 - 回答了你的“为什么”的问题当然是你没有的告诉的simplejson
差如何处理你的模型的实例中的一个做的。
当然,你需要写encode_myway
提供JSON-可编码数据,e.g:
def encode_myway(obj):
if isinstance(obj, User):
return [obj.username,
obj.firstname,
obj.lastname,
obj.email]
# and/or whatever else
elif isinstance(obj, OtherModel):
return [] # whatever
elif ...
else:
raise TypeError(repr(obj) + " is not JSON serializable")
基本上,JSON知道非常基本数据类型(字符串,整型和浮点型,组合成字典和列表) - 这是作为一个应用程序的程序员来匹配其他一切从这些基本数据类型/你的责任,并在simplejson
这典型地穿过在default=
或dump
时间dumps
一个函数来完成。
另外,你可以使用json
串行这是Django中的一部分,见的文档
不隶属于 StackOverflow