Hi Anthony, Thanks for your reply.
What i want to acheive is to restrict IS_IN_DB validator depending on the value of another field. It can be done on controllers, but i couldn't do it on model. Here is an example: - We have 2 departments: Letters and Numbers - We have teachers assgined to only one department - We have pupils assigned to only one department and optionally to a teacher, so we want to restrict the list of possible teachers to the department in common def index(): db = DAL('sqlite:memory:') db.define_table('department', Field('name'), format='%(name)s') db.define_table('teacher', Field('department_id', 'reference department'), Field('name')) db.define_table('pupil', Field('department_id', 'reference department'), Field('teacher_id', 'reference teacher'), Field('name')) # populating... if not db(db.department).count(): db.department.bulk_insert([dict(id=1, name='Letters'), dict(id=2, name='Numbers')]) if not db(db.teacher).count(): db.teacher.bulk_insert([dict(name='TeacherA', department_id=1), dict (name='Teacher1', department_id=2)]) if not db(db.pupil).count(): db.pupil.bulk_insert([dict(name='PupilA', department_id=1), dict( name='Pupil1', department_id=2)]) db.pupil.teacher_id.requires = IS_EMPTY_OR(IS_IN_DB(db((db.teacher. department_id==db.pupil.department_id)), 'teacher.id', '%(name)s', zero=T('Choose one'))) form = SQLFORM.grid(db.pupil, user_signature=False) return dict(form=form) This doesn't work as intended becuase it lets you assign teachers from both departments. I guess i'm doing a cartesian product instead of a filter... If you replace (db.teacher.department_id==db.pupil.department_id) with (db.teacher.department_id==request.post_vars.department_id) then you have an empty teachers list. Probably because post_vars is empty when you load the form?. If you try to use lambda as you can do with 'represent', then something weird happens and the dropdown dissapears: db.pupil.teacher_id.requires = lambda x,row: IS_EMPTY_OR(IS_IN_DB(db((db .teacher.department_id==row.department_id)), 'teacher.id', '%(name)s', zero=T('Choose one'))) Maybe this cannot be done in model. Regards! -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.