0

我的表单首先有效并且有效,但是当我将choiceField 添加到表单并在模板中使用select 时,它不再有效。form.is_valid 给出错误

在 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 回答