Flask: conditional validation on multiple form fields Flask: conditional validation on multiple form fields flask flask

Flask: conditional validation on multiple form fields


You are missing one very useful validator: Optional. This validator allows you to say that a field can be empty, but if it isn't empty then other validators should be used.

The part about having at least one of the fields filled out I would do with a custom validation method, I don't think there is any stock validators that can help with that.

So it would be something like this:

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

If you want to avoid a custom validation function, then consider that it would be fairly easy to create a validator class to check that at least one of a list of fields are set. You can look at the implementation of the EqualTo validator for inspiration if you would like to follow this route.