Now I see the problem: do this
class MYSELECT(SELECT): def _fixup(self): pass and use MYSELECT On Apr 20, 10:41 pm, Iceberg <iceb...@21cn.com> wrote: > Massimo's answer makes sense but does not entirely solve the problem. > > Using SELECT(...) instead of TAG.SELECT(...) in my previous sample > code, does not render proper html output. There are two unnecessary > blank option with wrong value. > > I guess SELECT(...) need to be fixed to support TAG.OPTGROUP(...), > perhaps a native OPTGROUP(...). > > Regards, > Iceberg > > On Apr18, 3:04am, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > you must use SELECT and not TAG.SELECT. The former is derived from > > INPUT an knows how to process options, tha latter is simply derived > > from a DIV and does not. > > > On Apr 17, 1:08 pm, Iceberg <iceb...@21cn.com> wrote: > > > > Hi Denes and/or Massimo, > > > > I just pick up this old post > > > fromhttp://groups.google.com/group/web2py/browse_frm/thread/971433920541935a > > > > I used the code suggested by Denes, e.g. using TAG.SELECT and > > > TAG.OPTGROUP. > > > > The code shows proper drop-down box but, after form.accepts(...) the > > > form.vars.my_field seems always None. > > > > def test_code(): > > > OG=TAG.OPTGROUP > > > g1=[ OPTION( r, _value=r ) for r in [23, 24, 25] ] > > > g2=[ OPTION( r, _value=r ) for r in [32, 33, 34] ] > > > ogs=[OG(_label='30 and under',*g1),OG(_label='over 30',*g2)] > > > sel = TAG.SELECT(_name='person', *ogs) # DO NOT USE > > > sel=SELECT(...) > > > form=FORM( sel, INPUT(_type='submit') ) > > > if form.accepts(request.vars,keepvalues=True): > > > response.flash = 'got %s' % form.vars.person # Why always got > > > none? > > > return dict(form=form) > > > > Question: What need I change to make form.vars.my_field work when > > > using TAG.SELECT()? > > > > By the way, in case some people might ask why bother, why not just use > > > request.vars.my_field instead, well, it is just my personal best- > > > practice because form.vars.my_field usually contains data qualified by > > > validators, therefore more precisely than request.vars.my_field. Think > > > about this: > > > define_table('my_table',Field('my_field', requires=IS_UPPER())) > > > form = SQLFORM(db.mytable) > > > and input "hello world", then > > > request.vars.my_field=="hello world" > > > but > > > form.vars.my_field=="HELLO WORLD" > > > usually form.vars.my_field contains what I really need. > > > > Regards, > > > Iceberg > > > > On Feb18, 12:48am, DenesL <denes1...@yahoo.ca> wrote: > > > > > So for future reference: > > > > > you can create OPTGROUPs with TAG.OPTGROUP > > > > but do NOT use it with the SELECT helper, > > > > you must use TAG.SELECT as in the following example: > > > > > def index(): > > > > OG=TAG.OPTGROUP > > > > g1=[ OPTION( r.name, _value=r.id ) for r in > > > > db(db.person.age<=30).select() ] > > > > g2=[ OPTION( r.name, _value=r.id ) for r in > > > > db(db.person.age>30).select() ] > > > > ogs=[OG(_label='30 and under',*g1),OG(_label='over 30',*g2)] > > > > sel = TAG.SELECT(_name='person', *ogs) > > > > # DO NOT USE sel=SELECT(_name='person',*ogs ) > > > > f=FORM( sel ) > > > > return dict(f=f) > > > > > Denes.