Hi Denes and/or Massimo,

I just pick up this old post from 
http://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