form.is_valid为false ChoiceField django在模板中选择

时间:2013-08-08 08:25:31

标签: django drop-down-menu django-forms django-templates

我的表单首先有效并且有效,但是当我将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()

,这会给出错误的

所以我的问题是,哪里出错了?没有这些改变一切正常,但当我这样做时,下拉表格就不再有效了

2 个答案:

答案 0 :(得分: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 }}

答案 1 :(得分:0)

让我这样说吧。

每当在form.py中添加ChoiceField时,尝试将其添加到 init 中。

例如:

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

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

在您的观点中。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()