質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

解決済

1回答

1910閲覧

DJANGOでPOST処理時に発生するMultiValueDictKeyErrorについて

ponitaro

総合スコア5

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

0クリップ

投稿2020/02/22 00:55

編集2020/02/23 06:25

勉強のため、DJANGOで簡単な仕事依頼アプリを作っている、python初心者です。
図-1の4つのclickボタンのいずれかを押してPOST処理に移行しようとすると
図-2のようにMultiValueDictKeyErrorが発生します。
ちなみに、4つのclickボタンのどれを押しても全く同じ挙動のerrorが発生します。
ソースコードの一部は下記のとおりです。恐縮ですが、errorの解決方法についてご教授いただけたら幸いです。
図-1 アプリ画面
イメージ説明

図-2 MultiValueDictKeyError発生の様子
イメージ説明

ソースコード
(views.py)

@login_required def mainpage(request): if request.method =='POST': if request.POST['mode']=='__workrequest_recognition__': gps=workrequest.objects.filter(worker=request.user) workrequests=[] for item in gps: workrequests.append(item.id) workrequestsanswer=[] for item in workrequests: aa=request.POST['workrequest_recognitionform'+str(item)] workrequestsanswer.append(literal_eval(aa)) yeslist=[] nolist=[] for item in workrequestsanswer: if item[0]=='yes': yeslist.append(item[1]) else: nolist.append(item[1]) yeswork=workrequest.objects.filter(id__in=yeslist) for item in yeswork: owner=item.worker genre=item.genre overview=item.overview priority=item.priority start_time=item.start_time end_time=item.end_time obj=work(owner=owner,genre=genre,overview=overview,priority=priority,start_time=start_time,end_time=end_time) obj.save() for item in yeswork: requester=item.requester worker=item.worker genre=item.genre overview=item.overview priority=item.priority start_time=item.start_time end_time=item.end_time yesorno='の依頼は受理されました' objj=workrequestresponse(requester=requester,worker=worker,genre=genre,overview=overview,priority=priority,start_time=start_time,end_time=end_time,yesorno=yesorno) objj.save() yeswork.delete() nowork=workrequest.objects.filter(id__in=nolist) for item in nowork: requester=item.requester worker=item.worker genre=item.genre overview=item.overview priority=item.priority start_time=item.start_time end_time=item.end_time yesorno='の依頼は拒否されました' objj=workrequestresponse(requester=requester,worker=worker,genre=genre,overview=overview,priority=priority,start_time=start_time,end_time=end_time,yesorno=yesorno) objj.save() nowork.delete() return redirect(to='yoteihyo/') if request.POST['mode']=='__workrequest_responseform__': if request.POST['yesorno']=='yes': ccc=workrequestresponse.objects.filter(requester=request.user) ccc.delete() return redirect(to='yoteihyo/') if request.POST['mode']=='__group_request_recognition__': ggg=group_request.objects.filter(groupowner=request.user) grouprequests=[] for item in ggg: grouprequests.append(item.id) grouprequestsanswer=[] for item in grouprequests: aa=request.POST['group_request_recognitionform'+str(item)] grouprequestsanswer.append(literal_eval(aa)) yeslist=[] nolist=[] for item in grouprequestsanswer: if item[0]=='yes': yeslist.append(item[1]) else: nolist.append(item[1]) yeswork=group_request.objects.filter(id__in=yeslist) for item in yeswork: user=item.owner group=item.groupname obj=groupmember(user=user, group=group) obj.save() """いまここ""" for item in yeswork: owner=item.owner groupowner=item.groupowner groupid=item.groupid groupname=item.groupname yesorno='グループ入会の申請は受理されました' objj=group_requestresponse(owner=owner, groupowner=groupowner, groupid=groupid, groupname=groupname, yesorno=yesorno) objj.save() yeswork.delete() nowork=group_request.objects.filter(id__in=nolist) for item in nowork: owner=item.owner groupowner=item.groupowner groupid=item.groupid groupname=item.groupname yesorno='グループ入会の申請は拒否されました' objj=group_requestresponse(owner=owner, groupowner=groupowner, groupid=groupid, groupname=groupname, yesorno=yesorno) objj.save() nowork.delete() return redirect(to='yoteihyo/') if request.POST['mode']=='__grouprequest_responseform__': if request.POST['yesorno']=='yes': ccc=group_requestresponse.objects.filter(requester=request.user) ccc.delete() return redirect(to='yoteihyo/') else: Workrequest_recognition='2' schedulekari=work.objects.filter(owner=request.user) schedules = schedulekari.order_by('start_time') time_schedule = TimeScheduleBS4(step=10, minute_height=0.5) time_schedule= mark_safe(time_schedule.format_schedule(schedules) ) """仕事リクエスト処理""" gps=workrequest.objects.filter(worker=request.user) workrequests=[] for item in gps: workrequests.append(item.id) Workrequest_recognition=workrequest_recognition(workrequests) requestresponsecount=workrequestresponse.objects.filter(requester=request.user).count() if requestresponsecount>0: requestresponsehtml=workrequestresponse.objects.filter(requester=request.user) requestresponseform=workrequest_responseform() else: requestresponsehtml='仕事依頼に対する返信はありません' requestresponseform=' ' ggg=group_request.objects.filter(groupowner=request.user) grouprequests=[] for item in ggg: grouprequests.append(item.id) Grouprequest_recognition=group_request_recognition(grouprequests) grouprequestresponsecount=group_requestresponse.objects.filter(owner=request.user).count() if grouprequestresponsecount>0: grouprequestresponsehtml=group_requestresponse.objects.filter(owner=request.user) grouprequestresponseform=group_request_responseform() else: grouprequestresponsehtml='仕事依頼に対する返信はありません' grouprequestresponseform=' ' params={ 'getdata': Workrequest_recognition, 'time_schedule': time_schedule, 'requestresponsehtml':requestresponsehtml, 'requestresponseform':requestresponseform, 'Grouprequest_recognition':Grouprequest_recognition, 'grouprequestresponsehtml':grouprequestresponsehtml, 'grouprequestresponseform':grouprequestresponseform } return render(request, 'schedule_app/index.html', params)

index.html

{% extends 'base.html' %} {% block content %} <style> .minute-wrapper { border: 1px solid #eceeef; } .hour-name { padding: 5px; text-align: right; border: 1px solid #eceeef; } .just-hour { border-top: 1px solid #eceeef; } </style> <div class="container"> <div class="row mt-5"> <div class="col-sm-4"> {{ time_schedule }} </div> <div class="col-sm-4 bg-info text-white"> <form action="{% url 'index' %}" method="post"> {% csrf_token %} {{ getdata.as_table }} <tr><td></td><td><input type="submit" value="click"></td></tr> </form> </div> <div class="col-sm-4 bg-info text-white"> <form action="{% url 'index' %}" method="post"> {% csrf_token %} {{ Grouprequest_recognition.as_table }} <tr><td></td><td><input type="submit" value="click"></td></tr> </form> </div> </div><!-- /.row --> <div class="row mt-4"> <div class="col-sm-8 bg-info text-white"> {%for item in requestresponsehtml%} <tr> <td>{{item}}</td> <tr> {% endfor %} </div> <div class="col-sm-4 bg-info text-white"> <form action="{% url 'index' %}" method="post"> {% csrf_token %} {{ requestresponseform }} <tr><td></td><td><input type="submit" value="click"></td></tr> </form> </div><!-- /.row --> <div class="row mt-4"> <div class="col-sm-8 bg-info text-white"> {%for item in grouprequestresponsehtml%} <tr> <td>{{item}}</td> <tr> {% endfor %} </div> <div class="col-sm-4 bg-info text-white"> <form action="{% url 'index' %}" method="post"> {% csrf_token %} {{grouprequestresponseform}} <tr><td></td><td><input type="submit" value="click"></td></tr> </form> </div><!-- /.row --> <div class="row mt-2"> <div class="col-sm-4"> <P><a href="{% url 'newwork' %}">予定の追加</a></P> </div> <div class="col-sm-4"> <P><a href="{% url 'newworkrequest' %}">仕事リクエスト作成</a></P> </div> <div class="col-sm-4"> <P><a href="{% url 'makeorapplygroup' %}">グループ作成、申請</a></P> </div> </div><!-- /.row --> </div><!-- /.container --> {% endblock %}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponitaro

2020/02/23 05:53

ご指摘いただき誠にありがとうございます。```をコード部分に追加いたしました。```で囲まないとコードとして認識されないのですね。これから気を付けます。
guest

回答1

0

ベストアンサー

if request.POST['mode']=='workrequest_recognition':

エラー原因自体は、'mode'という値がPOSTされてこないのに、取得しようとしているからではないでしょうか。

request.POST.get('mode')にすれば、値がない時は例外が出ずにNoneを取得できるので
処理を続行すると思います。

投稿2020/02/23 06:31

torofieldchan

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponitaro

2020/02/23 06:45

request.POST.get('mode')にしたところ、エラー解決しました! 誠にありがとうございます。本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問