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.

Reply via email to