我的表单首先有效并且有效,但是当我将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()
,这会给出错误的
所以我的问题是,哪里出错了?没有这些改变一切正常,但当我这样做时,下拉表格就不再有效了
答案 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()