如何禁用wtforms SelectField选项验证?

时间:2013-01-21 06:00:54

标签: python flask wtforms

我有一个wtforms表单

class MyForm(Form):
    names = SelectField('name', choices=[])

名称字段的选择是动态构建的,并通过ajax调用在模板中呈现。当我提交表单时,它会引发异常“不是一个有效的选择”。我不希望表单为我验证名称字段的选择。如何禁用验证?

3 个答案:

答案 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()

这也使您免于将表单的验证和错误消息与您之后自己生成的消息合并的繁琐。