【Django】フォーム:複数のチェックボックスからviews.pyで値を取得する

2021.06.23 /

【Django】フォーム:複数のチェックボックスからviews.pyで値を取得する

本記事では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で値を取得する」はいかがでしたか。

フォームから送信された情報をviews.pyで取得する方法は、Webアプリケーション開発では必須の知識です。

チェックボックスの値を取得するためにgetlist()メソッドを使うということは、ぜひ忘れずに覚えておいてください。