如何一起验证多个wtform字段以满足条件

问题描述 投票:1回答:1

我有一个表单,其中包含几个字段。持有表格的类看起来像

class TestForm(Form):
      some_stuff_1 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_2 = IntegerField('Boring Bucket', description="Boring bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_3 = IntegerField('Funny Bucket', description="Funny bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
      some_stuff_4 = IntegerField('Amazing Bucket', description="Amazing bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])

以上工作正常。但是现在我有一个额外的条件,我想确认用户不应该为所有4个字段输入全部0。因此,基本上,我正在这里寻找客户验证,如果用户在所有四个字段中均输入0,则应该向我显示一条消息。我看过flask wtforms自定义验证,但一次只适用于一个字段,在这里我尝试将验证应用于几个字段。

有人可以指导我怎么做。

python flask-wtforms wtforms
1个回答
0
投票

技巧是连接到验证钩并编写自己的测试。

class TestForm(FlaskForm):
    val1 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])
    val2 = IntegerField('Cool Bucket', description="Cool bucket",default=0,validators[validators.Optional(),validators.NumberRange(0, 100)])

    def validate(self):
        rv = FlaskForm.validate(self)
        if not rv:
            return False

        test = (self.val1.data == 0) and (self.val2.data == 0)
        if test:
            self.val1.errors.append('Val1 and 2 cannot be 0')
            return False

        return True
© www.soinside.com 2019 - 2024. All rights reserved.