在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误
Posted
技术标签:
【中文标题】在 Django 中处理 ajax json 对象 - \'QueryDict\' 对象没有属性 \'read\' 错误【英文标题】:Handling ajax json object in Django - 'QueryDict' object has no attribute 'read' error在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误 【发布时间】:2016-09-30 21:12:39 【问题描述】:我正在尝试在我的 Django 视图中解析 json 对象,该对象已通过 ajax 通过 post 方法从客户端传递。
JS:
$.post ('/update_vendor_merchandise_types/', JSON.stringify(json_obj))
;
查看:
def update_vendor_merchandise_types(request):
print json_object
# The output gives me
# QueryDict: <QueryDict: u'["merchandise_id":"3","merchandise_id":"4"]': [u'']>
json_object = json.load(request.POST) # Error arises
pass
在注释行出现'QueryDict' object has no attribute 'read' error
。
我做错了什么?
最终,我的目标是获取商品 ID 值。我试试
d = request.POST.iteritems()
for key, value in d:
print value
并期待像
3
4
【问题讨论】:
您可以使用json.load
将 json 格式转换为 dict。在这里,您有一个要转换为json
的字典。你会做json.dumps(request.POST.copy())
你到底想做什么? request.POST
是一个字典,它应该包含您实际需要的任何数据,没有任何意义 jsonifying 它
我已经编辑了这个问题。请查看 json_object 的值。我正在尝试遍历它。比如说,打印所有的mercurial_id和各自的value值
【参考方案1】:
request.POST
用于表单编码的内容。对于 JSON,您应该直接访问普通正文:
json_object = json.loads(request.body)
【讨论】:
Daniel,我将您的答案标记为解决方案,因为您的选项将 json 转换为 python 列表,结果证明最简单的循环方式 (d = json.loads(request.body) for x in d: print x[ 'merchandise_id'])。 @Eduard,您建议的方法也有效。 丹尼尔,你能看到这个问题吗? ***.com/questions/37586305/…【参考方案2】:json_obj 发送到服务器时为什么要转成字符串?我认为你应该这样做:
json_obj = "key1": "value1", "key2": "value2"
$.post('/update_vendor_merchandise_types/', json_obj)
在这种情况下,在服务器端,您可以通过这种方式访问发送的数据:
v1 = request.POST["key1"]
【讨论】:
Eduard,实际上,我希望循环的代码尽可能通用,并且我想避免通过字段名称来寻址 json 元素。相反,我的最终目标是遍历它 可能你的json_obj应该是这样的:"merchandise_ids": ["3", "4"]
,在这种情况下你可以通过执行ids = request.POST["merchandise_ids"]
在服务器上获取商品ID列表以上是关于在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误的主要内容,如果未能解决你的问题,请参考以下文章