繁体   English   中英

如何禁用 wtforms SelectField 选择验证?

[英]How can I disable the wtforms SelectField choices validation?

我有一个 wtforms 表格

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

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

我做了这样的事情来绕过SelectMultipleField中的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

我只是覆盖了内置验证。

我被同样的问题困住了。 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)

通过“我不希望表单验证选择”,我假设您的意思实际上是“我稍后会自己做,并怀疑表单是否有能力正确执行”。

但你很幸运! 您可以对现有表单进行子类化以动态添加选项。

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

这也使您免于将表单的验证和错误消息与您稍后自己生成的信息合并的乏味。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM