Thanks for your input, Maciej. El mié, 14-03-2007 a las 10:39 +0100, Maciej Wisniowski escribió: > Maybe the simplest solution is to use session for storing this data, > eg.: > > in update you check if there is 'myarg' in request, and if so then > put this into session. If there is no 'myarg' in request > you get this from session. >
I also thought about this solution but I don't like it because I will have clean up issues like: when do I remove 'myarg' from the session? > If you want this passed via POST/GET then you may try with > hidden() method of widgets, or write own widget that > renders as a hidden input, like: > > class EntryWidget(SimpleInputWidget): > > def _toFieldValue(self, input): > return unicode(input) > > def __call__(self): > return self.hidden() > > and assign this widget to field that will represent 'myarg': > > self.form_fields['myarg'].custom_widget=EntryWidget > I like this way better > You will possibly have to change the line: > data = self.request['myarg'] > > because your input will have form prefix. Or change 'myarg' argument to be 'form.myarg' and use an url like this: http://localhost:8080/myapp/mycontent/myform?form.myarg=23 In the end I wrote another interface like this: class IDialog(Interface) myarg = schema.TextLine(...) then a class like: class Dialog(object): implements(IDialog, IMyContent) def __init__(self, context, request): self.myarg = request['form.myarg'] self.context = context # here I implement all attributes and methods of IMyContent # using delegation to self.context And finally, my form: class MyForm(form.BaseForm): form_fields = form.Fields(IDialog, omit_readonly=False, render_context=True) form_fields['myarg'].custom_widget = HiddenWidget def __init__(self, context, request): context = Dialog(context, request) super(MyForm, self).__init__(context, request) An this worked well. The only part I think it's not optimal is the reimplementation (by delegation) of IMyContent in my Dialog dialog. Any thoughts? Lorenzo _______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users
