我想动态更新基于HTTP获取变量中包含的变量的表单字段。特别是www.site.com/form?id=name。我想从URL中拉出'id'字段并自动填充表单的memberID字段。如何修改updateWidgets中的z3c表单字段?
我可以使用self.request.get('id')访问get变量。但是我一直无法弄清楚如何更新表单域。我检查了小部件文档http://packages.python.org/z3c.form/widget.html,但没有任何建议起作用。
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)
*更新:updateWidget未正确缩进。
非常感谢Rok。我实施了你的建议并取得了一些进展。现在,表单字段memberID的值实际上会使用正确的ID进行更新,但是当页面呈现时,它不会使用ID填充。我使用pdb确认该值实际上已正确更改,但使用ID时文本字段不会更改。我错过了什么吗? –