我有一个wtforms表单
class MyForm(Form):
names = SelectField('name', choices=[])
名称字段的选择是动态构建的,并通过ajax调用在模板中呈现。当我提交表单时,它会引发异常“不是一个有效的选择”。我不希望表单为我验证名称字段的选择。如何禁用验证?
答案 0 :(得分:9)
我做了类似的事情来绕过WTForms中的SelectMultipleField
验证。对于普通SelectField
class NonValidatingSelectMultipleField(SelectMultipleField):
"""
Attempt to make an open ended select multiple field that can accept dynamic
choices added by the browser.
"""
def pre_validate(self, form):
pass
我只是覆盖内置验证。
答案 1 :(得分:2)
我遇到了同样的问题。 Xealot 提供的解决方案很棒。我发现有一个选项可以使用 False
将验证设置为 validate_choice=False
。我已经包含了以下两种解决方案的示例。
class NonValidatingSelectField(SelectField):
"""
Attempt to make an open ended select multiple field that can accept dynamic
choices added by the browser.
"""
def pre_validate(self, form):
pass
class MyForm(Form):
names = NonValidatingSelectField('name')
names2 = SelectField('name2', validate_choice=False)
答案 2 :(得分:0)
通过“我不希望表单验证选项”,我假设您实际上意味着“我将在以后自己做,并怀疑表单能否正确执行”
但你很幸运!您可以子类化现有表单以动态添加选项。
class MyForm(Form):
# other fields...
def some_handler(request):
name_choices = build_name_choices()
class RealForm(MyForm):
names = SelectField('name', choices=name_choices)
form = RealForm(request.GET)
form.validate()
这也使您免于将表单的验证和错误消息与您之后自己生成的消息合并的繁琐。