This validator handles a case where at least one of several fields must be non-blank.
class IS_NOT_ALL_EMPTY(object): """Class representing a validator requiring at least one non-empty field in a set. """ def __init__(self, others, error_message='Enter a value in at least one field'): self.others = others self.error_message = error_message def __call__(self, value): okay = (value, None) error = (value, self.error_message) # Return okay either the 'value', or one of self.others is not empty. values = [] values.append(value) values.extend(self.others) empties = [] for v in values: unused_v, empty = is_empty(v) empties.append(empty) # Example empties == [True, True, False] # If one False exists, it's valid if reduce(lambda x, y: x and y, empties): return error return okay Usage: db.define_table('contact', Field('name', 'string' requires=IS_NOT_ALL_EMPTY([request.vars.organization], error_message='Enter a name or an organization'), ), Field('organization', 'string', requires=IS_NOT_ALL_EMPTY([request.vars.name], error_message='Enter a name or an organization'), )) Cheers, Jim Karsten