多于 1 个字段的 WTForms 内联验证

WTForms inline validation of more than 1 field

我正在使用 WTForms 验证,我想对两个字段执行操作,然后 return 一条错误消息。

我知道我可以做到:

class SignupForm(Form):
    age = IntegerField(u'Age')

    def validate_age(form, field):
        if field.data < 13:
            raise ValidationError("We're sorry, you must be 13 or older to register")


我知道 "validate_age" 函数链接到年龄字段,但我想做这样的事情:

class SignupForm(Form):
    lowerage = IntegerField(u'LowerAge')
    upperage = IntegerField(u'UpperAge')

    def validate_ages(form, lowerage, upperage):
        if lowerage.data < 13 && upperage.data > 65:
            raise ValidationError("We're sorry, you must be aged between 13 and 65older to register")


我意识到由于 WTForms 的工作方式,代码完全无法工作,但我想对两个字段和 return 一条错误消息执行自定义验证。这可能吗?如果可以,将如何完成? 谢谢

可以像这样创建自定义验证器:

class MyValidator(object):
    def __init__(self, min=13, max=65, message=None):
        self.min = min
        self.max = max
        if not message:
            message = u"We're sorry, you must be aged between {min} and {max} older to register".format(min=self.min, max=self.max)
        self.message = message

    def __call__(self, form, field):
        l = field.data and len(field.data) or 0
        if l < self.min or self.max != -1 and l > self.max:
            raise ValidationError(self.message)

然后在表格上:

class SignupForm(Form):
      lowerage = IntegerField(u'LowerAge', [MyValidator(min=13)])
      upperage = IntegerField(u'UpperAge', [MyValidator(min=13, max=65)])