Django備忘録: 複数チェックボックス
複数のチェックボックスから値を受け取る方法
複数のチェックボックスやテキストから値を得る方法がわからなかったので調べてみました。 request.POSTからkey-valueで取得しようとすると一つのinputタグしか取得できないため、POSTのメソッドを使用しなければなりません。
HTML
サンプルのHTMLは以下になります。nameが同一で、valueが異なるときを想定しています。
<input type="checkbox" name="test" value="value1" /> <input type="checkbox" name="test" value="value2" />
viewでの受け取り方
今回は関数ベースのviewが前提です。
>>> values = request.POST.getlist('test') # testはcheckboxのinputタグのname >>> print(values) ['value1', 'value2']
getlistメソッドについて
request.POSTおよびrequest.GETオブジェクトはdjango.http.QueryDictクラスのインスタンスでした。 そのQueryDictは 辞書型のサブクラスであり、通常の辞書のメソッドに加えてgetlist, lists, urlencodeなどのメソッドも追加されていることがわかりました。 このQueryDictのメソッドを用いてリストを得ることができます。
参考にした公式ドキュメントを貼付します。 https://docs.djangoproject.com/ja/2.0/ref/request-response/#querydict-objects