Flask WTForms:验证至少一个字段的 InputRequired

Rob*_*bb1 8 python flask flask-wtforms

有没有一种方法可以在WTFforms中实现验证,强制要求至少有一个字段是必需的?

例如,我有两个StringFields,我想确保用户在单击“提交”之前至少在其中一个字段中写入一些内容。

field1 = StringField('Field 1', validators=[???])
field2 = StringField('Field 2', validators=[???])
Run Code Online (Sandbox Code Playgroud)

我应该写什么来代替???InputRequired()在这种情况下,无法完成这项工作,因为我需要将其分配给其中一个字段或同时分配给两个字段。我怎样才能做到这一点?

pjc*_*ham 6

重写表单的validate方法。例如:

class CustomForm(FlaskForm):

    field1 = StringField('Field 1')
    field2 = StringField('Field 2')

    def validate(self, extra_validators=None):
        if super().validate(extra_validators):

            # your logic here e.g.
            if not (self.field1.data or self.field2.data):
                self.field1.errors.append('At least one field must have a value')
                return False
            else:
                return True

        return False
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然可以向字段添加单独的验证器,例如输入长度。