About OPTGROUP, here is an example.
CHINA={
'CAN':'Guangzhou',
'SHA':'Shanghai',
'PEK':'Beijing(Peking)',}
INTERNATIONAL = {
'SYD':'Sydney',
'BKK':'Bankok',
}
AIRPORTS = dict(CHINA.items() + INTERNATIONAL.items())
db.define_table('booking',
Field('departure', requires=IS_IN_SET(AIRPORTS)),
...,
)
# so far, nothing is new. Then...
from gluon.sqlhtml import OptionsWidget
class GroupOptionsWidget(OptionsWidget):
def __init__(self, groups):
self.groups = groups
def widget(self, field, value, **attributes):
attr = OptionsWidget._attributes(field, {'value':value},
**attributes)
opts = [OPTION('')] + [ OPTGROUP( # OPTGROUP(...) is available
since web2py 1.77.4
_label=group, *[OPTION(v, _value=k) for (k, v) in
options.items()])
for group, options in self.groups.items() ]
return SELECT(*opts, **attr)
db.booking.departure.widget = GroupOptionsWidget({'China':CHINA,
'International':INTERNATIONAL}).widget
# That is it.
# I know it is not cool that we need to define our own
GroupOptionsWidget every time. But if there is enough interest, I
guess we can do more to enhance the already-too-complicated
IS_IN_SET(...), to support following pattern:
Field('departure',
IS_IN_SET( {'China':CHINA, 'International':INTERNATIONAL} ) )
I mean, a dict of dicts should automatically trigger a predefined
GroupOptionsWidget.
Regards,
Iceberg
On May16, 2:10pm, Jason Brower <[email protected]> wrote:
> Oh fun. But waht OPTGROUP, and block name/end stuff do? How do I use
> it?
> Best Regards,
> Jason
>
>
>
> On Sat, 2010-05-15 at 22:14 -0700, mdipierro wrote:
> > Please check it
>
> > changelog
> > - new template system allows {{block name}}{{end}}, thanks Thadeus
> > - fixed mime headers in emails, included PGP in emails, thanks Gyuris
> > - automatic database retry connect when pooling and lost connections
> > - OPTGROUP helper, thanks Iceberg
> > - web2py_ajax_trap captures all form submissions, thank you Skiros
> > - multicolumn checkwidget and arbitrary chars in multiple is_in_set,
> > thanks hy
> > - Québécois for welcome, thanks Chris
> > - crud.search(), thanks Mr Freeze
> > - DAL(...migrate,fake_migrate), thanks Thadeus