10

我有一个 wtforms 表单

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

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

4

3 回答 3

12

我做了这样的事情来绕过SelectMultipleFieldWTForms 中的验证。它应该以与平原相同的方式工作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

我只是覆盖了内置验证。

于 2015-07-08T02:24:52.470 回答
5

我遇到了同样的问题。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)
于 2021-04-12T19:28:40.233 回答
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()

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

于 2013-01-21T06:10:50.797 回答