1

私はかなりの検索を行いましたが、この特定のブランドのフォーム作成がどこにも対処されているようには見えません.

特定のしきい値以上の属性を持つすべての要素のセットをデータベースに照会する検索ページを作成しています。現在、5 つの属性を持つ単純なフォームがあり、それぞれに 5 つのしきい値があり、それぞれに独自のチェックボックスがあります。

attrib_1 X threshold 1 X threshold 2 X threshold 3 X threshold 4 X threshold 5
attrib_2 X threshold 1 X threshold 2 X threshold 3 X threshold 4 X threshold 5  
... etc ...

HTML は次のようになります。

  <div class= "form-inline">
    <label>Attribute 1</label>
    <label class="checkbox inline">
      <input type="checkbox" name="attrib 1" value="1"> Very Negative
    </label>
    <label class="checkbox inline">
      <input type="checkbox" name="attribt 1" value="2"> Negative
    </label>
    <label class="checkbox inline">
      <input type="checkbox" name="attrib 1" value="3"> Nonfactor
    </label>
    <label class="checkbox inline">
      <input type="checkbox" name="attrib 1" value="4"> Positive
    </label>      
    <label class="checkbox inline">
      <input type="checkbox" name="attrib 1" value="5"> Very Positive
    </label>
  </div>

次に、GET パラメーターの情報を使用してデータベースを検索します。検索結果を表示するときに、チェックボックスが検索クエリを反映していることを確認するエレガントな方法は何ですか? ユーザーがいくつかのボックスをチェックし、結果を見て、さらにいくつかチェックして検索を絞り込むことを期待していますが、検索を送信するたびにすべてのボックスを再チェックする必要はありません。

私はこれを行ういくつかの方法を検討しました。チェックボックスごとに if/else ステートメントを使用して、checked 属性を適切に入力できます。これは機能しますが、洗練されておらず、あまり DRY ではなく、非常に複雑なテンプレートになってしまいます。または、ビューでデータ構造 (リストの辞書またはタプルのリスト、おそらくリストの辞書) を作成することもできます。これには、各チェックボックスに「チェック済み」または空の文字列が含まれます。これにより、よりクリーンなテンプレートが作成されますが、これを行うには、より適切な Django/Pythonic の方法があると思います。特注の形も考えましたが、丸い穴に四角いペグをはめようとするようなものでした。

では、検索フォームのチェック ボックスが GET パラメータに基づいて適切にチェックされていることを確認するエレガントな方法は何でしょうか?

4

1 に答える 1

1

AJAX ではなく、ページを更新して POST しているのだと思います。その場合...

(Django の標準に従って) これらすべてのチェックボックスを Django フォームの一部として作成したと仮定します。その場合、すべてのチェックボックスの初期値を含む一連の引数 (辞書をお勧めします) をフォームに渡すことができます。

class SearchQuery(forms.form)

#Adding an init will allow us to pass arguments to this form In
# This case, a single dictionary argument named 'context'
    def __init__(self, *args, **kwargs)
        checkbox_context = kwargs.pop('context')
        super(SearchQuery,self).__init__(*args, **kwargs)
        #Now, instead of doing a bunch of if statements, we can say that
        # our dictionary passed a series of True and False keys that will
        # tell us how our checkboxes should be, in their initial state
        self.fields['checkbox_one'].initial = context['box1']

    checkbox_one = forms.BooleanField()

を渡したとしましょうcontext = {'box1':True}。チェックボックスは初期値の「True」または「Checked」でレンダリングされます。

于 2013-06-26T19:13:18.297 に答える