I am trying to dynamically update a form field based on a variable that is included in a HTTP get variable. Specifically http://www.site.com/form?id=name. I want to pull the ‘id’ field from the url and automatically populate the memberID field of the form.
I have access to the get variable using self.request.get(‘id’). However I haven’t been able to figure out how to update the form field. I examined the widget documentation http://packages.python.org/z3c.form/widget.html but none of the suggestions have worked.
class IUpdateEmailFormSchema(interface.Interface):
# -*- extra stuff goes here -*-
"""
"""
memberID = schema.TextLine(title=(u'Member id'))
email = schema.TextLine(title=(u'Email'), description=(u'The email'))
class updateEmailForm(form.Form):
fields = field.Fields(IUpdateEmailFormSchema)
label = _(u'Change Email')
ignoreContext = True
@button.buttonAndHandler(u'Update')
def handleUpdate(self,action):
data, errors = self.extractData()
if data.has_key('email'):
portal_membership = getToolByName(self.context, 'portal_membership')
member = portal_membership.getMemberById(data['memberID'])
def updateWidgets(self):
print "This is update widget \n\n"
import pdb; pdb.set_trace()
print self.request.form['id'] #Does not work as specified in http://packages.python.org/z3c.form/widget.html
#self.widgets["memberID"].value = self.request.get('id').encode('utf-8')
form.Form.updateWidgets(self)
updateEmailFormView = wrap_form(updateEmailForm)
*Update: updateWidget wasn’t correctly indented.
updateWidgets method is the right place to do it.
just you shouuld first call “form.Form.updateWidgets” and then do your
changes (even better user super() as shown bellow):
so basically the error was the order
and if there is no request (which is kinda weird and you are probably doing something worng there) then you can get it via: