我有一个简单的 View ,我用它来试验 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
如果我取出 data['x'] 行,这样我就不会引用它工作的任何模型并返回:
{"e": "11", "d": "2009"}
为什么 simplejson 不能解析我的默认 django 模型之一?我使用的任何模型都会得到相同的行为。
最佳答案
您只需要在 .dumps
中添加打电话,一个 default=encode_myway
let 的参数 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")
基本上,JSON 知道非常基本的数据类型(字符串、整数和浮点数,分组为字典和列表)——作为应用程序员,您有责任将其他所有内容与这些基本数据类型进行匹配,在
simplejson
中这通常通过传递给 default=
的函数完成在 dump
或 dumps
时间。或者,您可以使用
json
Django 一部分的序列化程序,参见 the docs .
关于ajax - Django 模型不是 ajax 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457735/