It is not that well documented, so I took an extract of code.
class MailForm(TableForm):
...
CascadingSingleSelectField(
# this will be used to id the widget
'region',
label_text='Region',
help_text = 'Please choose the region.
# what controller to call onchange
cascadeurl = '/choices/region',
# this is the default js event, but can be overriden
event = 'onchange',
# id of other widgets if you need their value to compute your choices
extra = ['gender', 'senior'],
size = 10,
),
Spacer(),
CascadingSingleSelectField('people',
label_text='People',
help_text = 'Please select a person.',
cascadeurl = '/choices/people',
),
Spacer(),
StringField('mailto',
label_text='To:',
),
...
in the controller let's add some methods
@expose('json')
def region(self, **kw):
""" called by the region widget
"""
# this is the value of the "gender" widget
gender = kw.get("gender")
# same for senior, they were defined in the extra attribute
senior = kw.get("senior")
# "value" is the value of our widget (region here)
region = kw.get("value")
# here we suppose that the _get_people method returns a list of tuples
# (value, display). it will result in display
people = self._get_people(gender, senior, region)
# the keys of the resulting dict will be used to determine
# what widget should be changed there could be many of those
return dict(people=people)
Further readings :
you might want to read this tw.dynforms tutorial
or the official documentation
No comments:
Post a Comment