Immagine you have the following (suggested by user Nik): db.define_table('person',Field('name'),format='%(name)s') db.define_table('company', Field('name'),format='%(name)s') db.define_table('member',Field('person',db.Person), Field('company',db.company))
and a new table db.define_table('manager', Field('member',db.member)) Now you may want to a validator for managers with names of possible people who are members of the company. You can do it in this way (allowed): db.manager.member.requires=IS_IN_DB(db,'member.id',lambda row: '% (name)s' % db.person[row.person]) It would be nice to be able to also use this alternative syntax (not yet allowed): db.manager.member.requires=IS_IN_DB(db(db.member.person==db.person.id),'member.id','% (person.name)s') This is not yet possible but would be better because it would use a join instead of one select per option. Want to larn web2py? Try understand the IS_IN_DB validator in gluon/validators.py and implement the proposed syntax above.