I don't know if this the problem, but check trunk, because there was a bug
with widgets.checkboxes.

2011/3/31 niknok <[email protected]>

>  Hello everyone.
>
> Is there anyone who could shed some light on this?
>
>    1. There are two versions of the code below which I thought are 
> *functionally
>    the same,* but the better looking code (version 1) doesn't work as
>    expected while ugly version 2 kinda works, browsing through questions work
>    but validation of answers fail every time ( I suspect the code is checking
>    the answers against the choices loaded in a previous questions (how 
> come???)
>    but couldn't put my finger on it and as far as see it, the only difference
>    between v 1 and 2 is the use of variables d_eng and d_loc ...)
>    2. When is the "readable" parameter determined? For example, the value
>    of variable session.q['locale'] is 2, and since "2<>1" evaluates to False,
>    how come the field is still readable, or shown on screen when I expect it 
> to
>    be hidden?
>
> My objective is to display a form, show a random question, validate answers
> against allowed choices then store it a temporary variable, then move to
> another question (or back to a previous question).When all the questions are
> done, save the answers as a single record  in the quiz database, then mark
> it to determine the score.
>
> I suspect that my problem stems from misunderstanding some web2py concept
> but I'm not sure what... :P. Knowing what I intend to do, am I on the right
> track of actually doing it right? If not, your suggestions are very welcome.
>
> Things I've noticed but don't know what to do:
>
> Nik
>
>
> db.define_table('language',
>       Field('description'),
>       format='%(description)s')
>
> db.define_table('questionnaire',
>       Field('dialog_id'),
>       Field('language' db.language)
>       Field('dialog')
>       Field('choices', 'reference:string')
>       Field('key')
>
> #*version 1 - nice to look at but doesn't work*. [image: :-D]
> #"readable" locale field parameter doesn't work as expected. 
> session.q['locale'] is set in another view/function.
> #q: shortform for db.questionnaire
> q = db.questionnaire
> #retrieve English dialog (default language)d_eng = 
> db((q.dialog_id==session.q['draw'][session.item_id]['id'])&(q.language==1)).select(q.dialog)
> #retrieve Alternative language and option listd_loc = 
> db((q.dialog_id==session.q['draw'][session.item_id]['id'])&(q.language==session.q['locale'])).select(q.dialog,
>  q.choices)
>
> form=SQLFORM.factory(
>       Field('english', 'string', writable=False,
>               default=d_eng[session.item_id-1]['dialog']),
>       Field('locale', 'string', writable=False,
>               readable = session.q['locale']<>1, # hide field if chosen 
> locale is English.
>               default=d_loc[session.item_id-1]['dialog']),
>       Field('answer',
>               widget=SQLFORM.widgets.checkboxes.widget,
>               default= session.q['answer'][session.item_id],
>               requires=IS_IN_SET(d_loc[session.item_id]['choices'], 
> multiple=True)))
>
>
> #*version 2 - hard to read, but browsing through questions work. when user 
> chooses an answer, validation fails.*
> # locale field readable still doesn't work.#q: shortform for 
> db.questionnaireq = db.questionnaireform=SQLFORM.factory(        
> Field('english', 'string', writable=False,              
> default=db((q.dialog_id==session.q['draw'][session.item_id]['id'])&(q.language==1)).select(q.dialog)[0]['dialog']),
>      Field('locale', 'string', writable=False,               readable = 
> session.q['locale']<>1, # hide field if no locale selected (defaults to 
> English)             
> default=db((q.dialog_id==session.q['draw'][session.item_id]['id'])&(q.language==session.q['locale'])).select(q.dialog)[0]['dialog']),
>    Field('answer',         widget=SQLFORM.widgets.checkboxes.widget,          
>      default= session.q['answer'][session.item_id],          
> requires=IS_IN_SET(db((q.dialog_id==session.q['draw'][session.item_id]['id'])&(q.language==1)).select(q.choices)[0]['choices'],
>  multiple=True)))
>
>
>
>
>
>
>


-- 
My blog: http://martin.tecnodoc.com.ar
Expert4Solution: http://www.experts4solutions.com/e4s/default/expert/6
http://www.cvstash.com/profile/Xzi5bWCdD

<<face-smile-big.png>>

Reply via email to