Python wtforms自定义验证器能否将字段设置为可选字段?
如果选中复选框,我将使用自定义验证器检查字段是否为空。它检查正确,但不管如何,它始终会验证值是否为数字 基本上,我需要一个字段在表单的某些条件下停止验证Python wtforms自定义验证器能否将字段设置为可选字段?,python,flask,wtforms,Python,Flask,Wtforms,如果选中复选框,我将使用自定义验证器检查字段是否为空。它检查正确,但不管如何,它始终会验证值是否为数字 基本上,我需要一个字段在表单的某些条件下停止验证 自定义验证器是否有方法停止现场验证 是的,自定义验证器可以像内置可选和必需的验证器一样控制验证流。要控制验证流,请使用StopValidation异常,并且不会执行进一步的验证 如果使用消息引发StopValidation,则会将其添加到错误列表中,否则,如果没有消息,则不会添加更多错误 如果您使用的是IntegerField、FloatFie
自定义验证器是否有方法停止现场验证 是的,自定义验证器可以像内置可选和必需的验证器一样控制验证流。要控制验证流,请使用
StopValidation
异常,并且不会执行进一步的验证
如果使用消息引发StopValidation,则会将其添加到错误列表中,否则,如果没有消息,则不会添加更多错误
如果您使用的是IntegerField、FloatField等。。您还必须记住在输入强制时发生的“处理错误”。可选验证器处理此问题的方式是,如果输入为空,它将清除所有以前的错误。让我们快速查看wtforms/fields.py中可选验证器的代码:
if not field.raw_data or isinstance(field.raw_data[0], basestring) and not field.raw_data[0].strip():
field.errors[:] = []
raise StopValidation()
正如您可以看到的,如果没有输入或空白输入,它会清除以前的错误
那么,让我们来看看如何实现自定义验证器
from wtforms.validators import StopValidation
def myvalidator(form, field):
if not form.some_checkbox_field.data:
# clear out processing errors
field.errors[:] = []
# Stop further validators running
raise StopValidation()
然后,您可以像这样使用验证器:
from wtforms import BooleanField, IntegerField, Form, validators as v
class SomeForm(Form):
some_checkbox_field = BooleanField('Enable MyNumber')
mynumber = IntegerField('', [myvalidator, v.NumberRange(min=5, max=50)])
因此,如果选中复选框,它将验证mynumber是否是输入的数字。此外,还将运行NumberRange验证程序。如果未选中,错误将被清除,并且StopValidation将阻止NumberRange运行。的可能副本供参考。