2011-07-12 15 views
0

私はDjangoアプリケーションのユーザーにyes/noの質問をたくさんお願いしています。ラジオボタンではなくチェックボックスを使用したいと思います。問題は、チェックされている各チェックボックスではなく、各チェックボックスにvalueが必要だということです。チェックボックスをオフにすると、Djangoの値が返されます

私は素敵なハックのように見えた、追加のhidden checkboxesを使用して、このトリックを見つけましたが、one of the commentsは私の心の中でいくつかの疑問提起:これは正しくありません

を。両方の値が送信され、HTMLでは同じ名前の[複数の]値が許可されます。

これは本当ですか?もしそうなら、Django HttpRequest.POSTは同じ名前/キーに対して複数の値をどのように扱いますか?

+1

あなたのアプリですが、意図的にHTMLフォームの動作を妨害しています。それは、私が数か月後に戻ったとき(または新しいプロジェクトに乗って来るとき)、私を刺すようなものです。 –

+0

@ハンクゲイ:代わりにラジオボタンを使用することをお勧めしますか? –

+0

はい。はい/いいえラジオボタンは、必要な機能を実現するための標準的な方法です。あなたは、もちろん、あなたが標準に違反していることを認識している限り、必要に応じて違う方法で自由にすることができます。私はこれが実際にあなたが尋ねた質問に対する答えではないことを認識しているので、コメントとして残しました。 –

答えて

1

HTMLはユーザーが単一のキーに対して複数の値を提出できるようにするため、Djangoはその可能性に対応するために特殊なデータ構造を使用する必要があります。結果はMultiValueDictであり、request.GETrequest.POSTはそのフードのインスタンスです。あなたはここでその構造のコードを閲覧することができます。http://djangoapi.quamquam.org/trunk/django.utils.datastructures.MultiValueDict-class.html

ショートストーリーはしかし、あなたがrequest.POST['mykey']のような単純な辞書検索とrequest.POST.getlist('mykey')のようなすべての値のリストを最初の値にアクセスできることです。

他のコメント作成者が指摘しているように、あなたが記述したユースケースを処理するには、おそらくより良い方法があります。 yes/noオプション付きのラジオボタンは1つの解決策ですが、おそらくユーザの視点からは利用できません。私はそれを処理する最善の方法は、フォームの処理方法を再考し、生のPOSTデータを低レベルで処理するのではなく、可能な限りDjango Formsライブラリを使用することだと思います。

+0

私は明日のデモのために 'getlist'メソッドに固執しますが、私は最終版の解決策を考え直します。 Formsライブラリを指摘してくれてありがとう。 –

+0

いいですね。実際のプログラミング作業を行った人は、次善策であれば迅速な解決の必要性を理解することができます:)フォームを使用すると、長期的には多くの苦痛を軽減します。 –

関連する問題