QuerySet 不是 JSON 可序列化的 Django
Posted
技术标签:
【中文标题】QuerySet 不是 JSON 可序列化的 Django【英文标题】:QuerySet is not JSON Serializable Django 【发布时间】:2017-06-18 23:22:22 【问题描述】:新手编程在这里。我有一个有很多行的模型,我想将每一行传递给 javascript。
第一次尝试:
Views.py
events = Events.objects.filter(user_id=user_id) // filter by user_id
context =
"email": request.user.email,
"login": True,
"objects": events,
return render(request, 'fullcalendar/index.html', context)
Events
是表的名称,我将每一行存储在events
中。将其传递给一个名为context
的字典,然后将其传递给我的模板。然后从我的模板中我可以做这样的事情:
% for object in objects %
<p>event.column_name</p>
% endfor %
这可以正常工作,但是我不能在 javascript 部分中这样做。
% for object in objects %
var date = object.date // assuming object has a column named date
% endfor %
第二次尝试
所以我做了一些研究并决定使用 json。
在 Views.py 中我做了以下更改:
return render(request, 'fullcalendar/index.html', "obj_as_json": simplejson.dumps(context))
因此我希望这样做:
var objects = obj_as_json
for object in objects
//Do some stuff
但我收到了错误QuerySet is not JSON Serializable Django
。所以我查找了如何序列化对象并进行了以下更改:
data = serializers.serialize('json', events.objects.all())
但我收到以下错误:'QuerySet' object has no attribute 'objects'
伙计,必须有一种更简单的方法来做我想做的事。有什么想法吗?
【问题讨论】:
【参考方案1】:试试这个:
data = serializers.serialize('json', events)
您收到的错误消息是告诉您events
已经是一个 QuerySet,没有理由尝试对其进行更多操作。
您也可以重温您之前的尝试:
% for object in objects %
var date = object.date // assuming object has a column named date
% endfor %
你需要像这样实际使用 Django object
:
% for object in objects %
var date = object.date
% endfor %
您在object
之前的操作方式只是undefined
,您会收到错误cannot read property date of undefined
【讨论】:
以上是关于QuerySet 不是 JSON 可序列化的 Django的主要内容,如果未能解决你的问题,请参考以下文章
Celery EncodeError(TypeError('响应类型的对象不是 JSON 可序列化的'))
Django 将日期时间序列化为 QuerySet/Dict 中的 json