【Django】フォーム:複数のチェックボックスからviews.pyで値を取得する
2021.06.23 /
本記事ではDjangoのフォームを通して送信された、チェックボックスの値をviews.pyで取得する方法を解説していきます。
ユーザーが入力した情報をサーバー(Django)に送信するためにフォームは使用されます。
Webアプリケーションでは、フォームを使ってWebサイトとサーバーでやり取りをよく行います。
フォームにはテキストボックスやラジオボタン、チェックボックスなどがあり、本記事ではチェックボックスに焦点をあてています。
複数のチェックボックスから、チェックしたボックスの値を取得するにはどうすればよいのか。
本記事を通してその方法を学んでいきましょう。
チェックボックスの実装:テンプレート(HTMLファイル)
ご存じのようにチェックボックスを実装するにはinputタグを使います。
typeにはcheckboxを指定し、次のように記述します。
<label><input type="checkbox" name="office" value="52">52</label>
<label><input type="checkbox" name="office" value="53">53</label>
<label><input type="checkbox" name="office" value="54">54 </label>
これでチェックボックスはテンプレートに表示されます。
チェックした値をサーバーに送信するために、formタグで囲います。
また送信ボタンもinputタグで作成します。
<form class="" action="{% url '' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<label><input type="checkbox" name="office" value="52">52</label>
<label><input type="checkbox" name="office" value="53">53</label>
<label><input type="checkbox" name="office" value="54">54 </label>
<input type="submit" name="button" value="送信">
</form>
送信された値(HTTPリクエスト)は次に示すviews.pyで受信されます。
チェックされた値の取得:views.py
テンプレートから送信された情報(HTTPリクエスト)は、views.pyで取得して操作することができます。
views.pyでは送信された情報をrequestオブジェクトとして受け取ります。
そのためviews.pyでは次のようにdef(関数)を記述して、requestオブジェクトを受け取ります。
def receive_checkbox(request):
テンプレートでチェックされた値のみがサーバーに送信されます。
送信された情報がPOST方式であれば、request.POSTで取得できます。
request.POSTは辞書型のデータです。
チェックボックスがname=officeであれば下記の方法でチェックされた値を取得できます。
check = request.POST["office"]
しかしこの方法では、チェックされた値の最後の1つのみしか取得できません。
チェックボックスでチェックされた値すべてを取得するためにはgetlist()メソッドを使用します。
getlist()メソッドにより、チェックされた値をリスト型ですべて取得できます。
check = request.POST.getlist["office"]
53と54をチェックしている場合は、check = ["53", "54"]となります。
getlist()メソッドについては以下記事をご参照ください。
【django】views.py:request.POST/GETから値を取得する方法(get、getlist)
まとめ
本記事「【Django】フォーム:複数のチェックボックスからviews.pyで値を取得する」はいかがでしたか。
フォームから送信された情報をviews.pyで取得する方法は、Webアプリケーション開発では必須の知識です。
チェックボックスの値を取得するためにgetlist()メソッドを使うということは、ぜひ忘れずに覚えておいてください。