Hello Dave,
here how I solved this problem:
-----------------------------------------------------
from turbogears import expose, widgets
from sicer.model import Regione, Provincia, session
from turbogears.widgets.forms import Form
class NoSubmitForm(Form):
template = """
<form xmlns:py="http://purl.org/kid/ns#"
action="${action}"
method="${method}">
<div py:for="i, field in enumerate(fields)">
<label class="fieldlabel" for="${field.field_id}"
py:content="field.label" />
<span py:replace="field.display(value_for(field),
**params_for(field))" />
</div>
</form>
"""
def opt_regioni():
return [ (rec.codice, unicode(rec)) for rec in
session.query(Regione).select() ]
def opt_province(cod_regione):
return [ (rec.codice, unicode(rec)) for rec in
session.query(Provincia).select_by(cod_regione=cod_regione) ]
indexForm = NoSubmitForm(
fields = [ widgets.SingleSelectField(name='cod_regione',
label='Regione',
options=opt_regioni,
attrs={'onchange':'form.submit()'}),
widgets.SingleSelectField(name='cod_provincia',
label='Provincia',
options=[('','')]),
],
action='index',
)
class Controller(object):
@expose(template="kid:sicer.templates.comuni.select")
def index(self, **data):
form_params = dict(value=data)
if data:
form_params['options'] =
{'cod_provincia':opt_province(data['cod_regione'])}
else:
form_params['attrs'] = {'cod_provincia':{'disabled':'disabled'}}
return dict(indexForm=indexForm, form_params=form_params)
-----------------------------------------------------------------------------------
jo
Dave wrote:
>Hello,
>
>I'm currently looking to design an application in Turbogears but am
>getting hung up on one specific challenge - that's updating form fields
>conditionally based upon the selection of another form field. For
>instance:
>
>In a form, you have two select fields, one for state and one for city.
>I want the city field to be populated with city names that are ONLY in
>the state selected, which would (presumably) be pulled from a database.
> I'd like to do it asynchronously versus posting the entire form and
>dealing with the whole page reloading.
>
>I've found a lot of different posts that resemble, but aren't very
>clear. Based on what I'm reading, it sounds like I would have to do
>something in Javascript on the "onchange" event on the "state" input
>that sends an HTTP request, gets some result and then updates the DOM
>object, but I'm getting a little lost here. Can anyone point me in the
>right direction?
>
>Thanks,
>
>DS
>
>
>>
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---