you can pass orderby to IS_IN_DB

from the shell you can get help about every function like

>>> help(IS_IN_DB)

On Oct 6, 2:55 am, annet <[email protected]> wrote:
> 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