2017-03-29 6 views
0

クライアント側では、このようなリストタイプのデータを含むJSONデータを送信しました。djangoのリストタイプのデータにアクセスするにはどうすればいいですか?

$.ajax({ 
    url: '/man/manual', 
    type: 'POST', 
    data: {'id':'','title':'ttt','description':'desc','steps':[{'title':'1'},{'title':'2'}]}, 
    dataType : 'JSON', 
    success : function(data) { 
     console.log(data); 
    } 
}); 

これらのデータにアクセスしようとしました。

title = request.POST['title'] 
description = request.POST['description'] 
steps = request.POST['steps'] 

for step in steps: 
    print(step.title) 

エラーが発生しました。

Traceback: 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 

132. response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in view 

71. return self.dispatch(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch 
89. return handler(request, *args, **kwargs) 
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in post 
77. self.createManual(request) 
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in createManual 
27. steps = request.POST['steps'] 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/utils/datastructures.py" in __getitem__ 
322. raise MultiValueDictKeyError(repr(key)) 

Exception Type: MultiValueDictKeyError at /man/manual 
Exception Value: "'steps'" 
Request information: 
GET: No GET data 

POST: 
description = 'desc' 
steps[1][title] = '2' 
steps[0][title] = '1' 
title = 'ttt' 
id = '' 

どのように私のコードをクライアント側から正しいデータに変更できますか?

答えて

1

要求されたキーでリストを取得する場合は、getlistメソッドを使用してください。

steps = request.POST.getlist('steps') 

doc is here

2

まず、私はAJAXリクエストのdata属性に送信しますと、あなたが今送信しているもののJSON.stringify({...})だろう。

次に、Pythonコードでは、私は:import json; json.loads(request.body)とそれはあなたにPythonの初期JS辞書を与えるだろう。その後、それを通常の辞書として使用することができます。 json.loads(request.body.decode(), encoding='utf-8'):JSON文字列はプレーンなASCIIでない場合は、あなたのようなものを使用して、最初にそれをデコードする必要があるかもしれません :

またstepはので、それを印刷する正しい方法はprint(step['title'])代わりのprint(step.title)

編集だろうdictionaryです

+0

私はあなたの提案をテストしましたが、エラーメッセージが表示されました。例外値:JSONオブジェクトは 'bytes'ではなくstrでなければなりません リクエスト情報: GET:いいえGETデータ POST: {"id": "111"、 "title": "ttt"、 "description" 'desc"、 "steps":{"title": "1"}、{"title": "2"}、{"title": "3"}}} = '' – eachone

+0

あなたは 'json 'を使いましたか?あなたのpythonコードで 'request.POST'の代わりに' load(request.body) 'を実行しますか? – Foryah

+0

json.loads(request.body.decode()、encoding = 'utf-8')は私のために働いています – eachone

関連する問題