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

Flask WTForms: validation InputRequired for at least one field

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

例如,我有两个 StringField,我想确保用户在单击“提交”之前至少在其中一个字段中写了一些东西。

field1 = StringField('Field 1', validators=[???])
field2 = StringField('Field 2', validators=[???])

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

重写表单的 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

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