This being your model:
db.define_table('teachers',
Field('code',length=18,default='',notnull=True,unique=True),
migrate='teachers.table')
db.define_table('subjects',
Field('code',length=30,default='',notnull=True,unique=True),
migrate='subjects.table')
db.define_table('teachers_subjects',
Field('teacher_id',db.teachers),
Field('subject_id',db.subjects),
migrate='teachers_subjects.table')
db.teachers_subjects.teacher_id.requires=IS_IN_DB(db,
db.teachers.id,'%
(code)s',zero=None)
db.teachers_subjects.subject_id.requires=IS_IN_DB(db,
db.subjects.id,'%
(code)s',zero=None)
This being the population in the tables:
teachers:
1 t1
2 t2
subjects
1 a
2 b
3 c
4 d
5 e
6 f
7 9
teachers_subjects
1 1 1
2 1 4
3 1 7
4 2 2
The code to create the drop box would be:
def index():
rows=db().select(
db.subjects.id,db.subjects.code,\
left=db.teachers_subjects.on((
db.subjects.id==db.teachers_subjects.subject_id)
\
&(db.teachers_subjects.teacher_id==1)),\
orderby=~db.teachers_subjects.teacher_id|
db.subjects.id)
key=[
k.id for k in rows]
value=[v.code for v in rows]
form=SQLFORM.factory(Field('subject',requires=IS_IN_SET(key,value,zero=None)))
return dict(form=form)
Kind regards,
Annet.