0

私のフォームは最初は有効で機能していますが、choiceField をフォームに追加してテンプレートで select を使用すると、無効になります。form.is_valid が false を返す

form.py に次の行を追加しました:

     crossover_select = forms.ChoiceField(label="crossover_select")

テンプレートにこれらを追加しました:

        <select name="crossover_select">
            <option value={{crossover}}>old value {{crossover}}</option>
            <option value={{peak}}>Peak {{peak}}</option>
            <option value={{median}}>Median {{median}}</option>
            <option value="Other">Other</option>
        </select>

これらのクロスオーバー、ピーク、およびメジアンはフロートです。

私が持っているとき、今views.pyにあります:

     if request.method=='POST':
          form = myForm(request.POST)
          print form.is_valid()

そしてそれは偽を与える

だから私の質問は、これはどこが間違っているのですか? これらの変更がなくてもすべて機能しますが、ドロップダウンを行うと、フォームは無効になります

4

2 に答える 2

0

choicesフォーム フィールドに指定する必要があります。そうしないと、フォームが検証されません。

次のようなものを追加します。

CROSSOVER_CHOICES = ( (1.0, "Old value 1.0"),
                      (2.0, "Peak Two"),
                    )

crossover_select = forms.ChoiceField(label="crossover_select", 
                                       choices=CROSSOVER_CHOICES)

で指定されたCROSSOVER_CHOICES値は、フォームから送信された値と一致する必要があることに注意してください。そのためには、選択肢の値を html で手動でコーディングするのではなく、このフィールドをレンダリングすることをお勧めします。

したがって、htmlのこれらの行の代わりに

<select name="crossover_select">
        <option value={{crossover}}>old value {{crossover}}</option>
        <option value={{peak}}>Peak {{peak}}</option>
        <option value={{median}}>Median {{median}}</option>
        <option value="Other">Other</option>
</select>

行う

{{ form.crossover_select }}
于 2013-08-08T08:36:41.213 に答える
0

このように言わせてください。

form.py に ChoiceField を追加するときはいつでも、initに追加してみてください。

元:

def _ _init _ _(self, *args, **kwargs):

        super(<class_name>, self).__init__(*args, **kwargs)
        crossover_select = forms.ChoiceField(label="crossover_select")

そしてあなたのviews.pyで

if request.method=='POST':

      #request.POST has all choice field values in this format
      {'xyz': [u'This field is required.']}
      # change it to {'xyz': 'This field is required.'} by updating 
      the request.POST
      # import copy
      data = copy.deepcopy(dict(request.POST))
      update this dict(data) and pass it to constructor
      form = myForm(data)
      print form.is_valid()
于 2018-10-25T10:11:25.260 に答える