您缺少一个非常有用的验证器:Optional。该验证器允许您说一个字段可以为空,但如果该字段不为空,则应使用其他验证器。
关于填写至少一个字段的部分,我将使用自定义验证方法来完成,我认为没有任何股票验证器可以帮助您解决这一问题。
所以会是这样的:
class FirewallRule(Form) src_ip = StringField('Source IP', validators=[Optional(), IPAddress()]) dst_ip = StringField('Destination IP', validators=[Optional(), IPAddress()]) def validate(self): if not super(FirewallRule, self).validate(): return False if not self.src_ip.data and not self.dst_ip.data: msg = 'At least one of Source and Destination IP must be set' self.src_ip.errors.append(msg) self.dst_ip.errors.append(msg) return False return True如果要避免使用自定义验证功能,请考虑创建一个验证器类来检查是否已设置字段列表中的至少一个是相当容易的。如果您想遵循此路线,可以查看EqualTo验证器的实现以获取启发。



