An even deeper problem: how to do something like that in a GAE environment? The BigTable-like datastore has a lot of query restrictions.
On Oct 6, 9:25 pm, Tiago Rosa <[email protected]> wrote: > Hello annet and Massimo! > > Thank you very much for your help! I still need some enlightenment > though =) > > I've managed to make it work thanks to annet's tip. Here's how I am > currently doing it: > > I have defined a helper function that takes a teacher_id and spits out > the dropdown field (!) generated through annet's method: > > def subject_biased_dropdown(teacher_id): > 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==teacher_id)), > orderby=db.teachers_subjects.teacher_id|db.subjects.id) > key = [row.id for row in rows] > value = [row.name for row in rows] > form = SQLFORM.factory( > Field('subject_id', requires=IS_IN_SET(key,value,zero=None))) > return form[0][0] > > And then, in the "evaluation/create" function of the "evaluation" > controller, I replace the dropdown field in the autogenerated SQLFORM > with the "biased" one that comes from the above function: > > def create(): > (...) > form_add=SQLFORM(db.evaluations, > (...) > ) > form_add[0][0] = subject_biased_dropdown(prof_id) > if form_add.accepts(request.vars, session): > (...) > return dict(form=form_add) > > Yes, it works, but I feel something strange about the way I'm > implementing this. I guess I'm missing something obvious that would > make it easier/more "best-practice-like". Defining the orderby at the > model level seems like a better option, but I can't figure it out yet. > > Again, thank you very much for your help! > > Regards, > > Tiago Rosa > > On Oct 6, 2:01 pm, annet <[email protected]> wrote: > > > Massimo, > > > > you can pass orderby to IS_IN_DB > > > To which IS_IN_DB do I have to pass the orderby to get the same > > result. The resultset reads like: > > > 1 1 a > > 1 4 d > > 1 7 9 > > None 2 b > > None 3 c > > None 5 e > > None 6 f > > > The orderby: orderby=~db.teachers_subjects.teacher_id|db.subjects.id > > first sorts it in reverse order by db.teachers_subjects.teacher_id and > > then by db.subjects.id, to meet Tiago's requirement: > > > When creating a new evaluation for teacher t1, the items on the > > subject dropdown should appear in the following order: > > > a //related > > d //related > > g //related > > b > > c > > e > > f > > > Annet. > >

