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.

Reply via email to