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

标签 ajax django json django-models django-views

我有一个简单的 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/

相关文章:

php - 使用 AJAX 检索 JSON 数据

php - 如何正确使用 JSON 从 php 文件中获取 MYSQL 数据库的行数?

java json Controller

javascript - 如何比较 JavaScript 中的数组?

javascript - jQuery Ajax更改缓存的变量名称: false

javascript - Ajax - JSON 响应无法很好地读取 ids 数组

javascript - 在渲染的 html 页面上使用 Django 渲染的 Javascript 列表

python - 在 Django 表单中动态将 CharField 转换为 ChoiceField?

jQuery AJAX 多种内容类型似乎不起作用

python - Django:TypeError - 'QuerySet' 类型的参数不可迭代