gpt4 book ai didi

ajax - Django 模型不是 ajax 可序列化的

转载 作者:行者123 更新时间:2023-12-04 02:41:33 24 4
gpt4 key购买 nike

我有一个简单的 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= 的函数完成在 dumpdumps时间。

或者,您可以使用 json Django 一部分的序列化程序,参见 the docs .

关于ajax - Django 模型不是 ajax 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com