At first thanks villas for the correction of the boolean 'multiple' argument.
DenesL I agree that "multiple should mean 1 or more, not zero or more." Making though the following test: >>> IS_IN_SET(['max', 'john'])('') ('', 'value not allowed') >>> IS_IN_SET(['max', 'john'], multiple=True)('') ([], None) seems that the zero option strangely is allowed for the multiple case. According to: http://www.web2py.com/examples/static/epydoc/web2py.gluon.validators.IS_IN_SET-class.html#__call__ this is due to lines: 327 if self.multiple and (value == None or value == ''): 328 return ([], None) I think should return (value, self.error_message), as is the case for multiple=False > > Because multiple is not False, but I am not sure about the logic. > No selection should still fail because it is not in the set, > i.e. multiple should mean 1 or more, not zero or more. >