Hi > Betreff: [Zope3-Users] z3c.form and subforms in an AddForm? > > > I've been trying out the new z3c form package and like what I > see. I am having problems getting a subform in an AddForm > though. The subform.txt covers EditForms where you have a > context object to work on, in an AddForm the context is the > underlying IContainer. > > Here is what I have, using formdemo examples as the basis. > Any help on getting this to work is greatly appreciated. > > IRestaurant with address attribute using schema.Object > holding an IAddress. > > browser/restaurant.py > > class RestaurantAddForm(AddFormLayoutSupport, form.AddForm): > """Add form""" > > template = None > layout = None > contentName = None > label = u'Add Restaurant' > > fields = field.Fields(IRestaurant).omit('address') > > def update(self): > self.address = AddressAddForm(self.context.address, > self.request) ## > <---- Problem area > self.address.update() > super(RestaurantAddForm, self).update()
You can add a custom setupWidgets method in the sub form which disables the context adaption. Stephan and I duscussed this during development, I think we should add the hook into the form. He thinks not. But I guess we have to discuss this once again. Here is the method for context less forms: def updateWidgets(self): self.widgets = zope.component.getMultiAdapter( (self, self.request, self.getContent()), interfaces.IWidgets) self.widgets.ignoreContext = True self.widgets.ignoreReadonly = True self.widgets.update() > def create(self, data): > r = Restaurant() > r.name = data['name'] > r.description = data['description'] > r.address = data['address'] > return r > > def add(self, object): > self._name = object.name > self.context[self._name] = object > return object > > def nextURL(self): > return absoluteURL(self.context[self._name], self.request) Regards Roger Ineichen _____________________________ END OF MESSAGE _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users