the*_*rty 10 django ajax json django-models django-views
我有一个简单的观点,我正在尝试使用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')
Run Code Online (Sandbox Code Playgroud)
这将返回以下内容:
TypeError at /sched/shifts/2009/11/9/
<User: someguy> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
如果我取出数据['x']行,这样我就不会引用它工作的任何模型并返回:
{"e": "11", "d": "2009"}
Run Code Online (Sandbox Code Playgroud)
为什么simplejson不能解析我的默认django模型之一?我使用的任何模型都有相同的行为.
Ale*_*lli 29
你只需要在你的.dumps调用中添加一个default=encode_myway参数,让你simplejson知道当你传递它不知道的类型的数据时该做什么 - 你的"为什么"问题的答案当然是你没有告诉穷人simplejson什么与你的一个模型实例一起做.
当然,您需要编写encode_myway以提供可编码JSON的数据,例如:
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")
Run Code Online (Sandbox Code Playgroud)
基本上,JSON知道非常基本的数据类型(字符串,整数和浮点数,分为字典和列表) - 作为应用程序程序员,您有责任将所有其他内容与此类基本数据类型进行匹配,并且simplejson通常通过函数传递给default=at dump或dumpstime.
或者,您可以使用jsonDjango 的序列化程序,请参阅文档.