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()
    
    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)


browser/address.py

class AddressAddForm(AddFormLayoutSupport, form.AddForm):
    template = None
    layout = None
    contentName = None
    label = u'Address'
    
    fields = field.Fields(IAddress)
    prefix = u'address'

browser/configure.zcml

  <!-- Restaurant Add Form -->
  <z3c:pagelet
    name="addRestaurant.html"
    for="zope.app.folder.interfaces.IFolder"
    class=".restaurant.RestaurantAddForm"
    layer="metrod.app.layer.IMetroDBrowserLayer"
    permission="zope.Public" />
  
  <z3c:template
    template="restaurant.pt"
    for=".restaurant.RestaurantAddForm"
    layer="metrod.app.layer.IMetroDBrowserLayer" />

   <!-- Address Add Form -->  
  <z3c:pagelet
    name="addAddress.html"
    for="metrod.restaurant.interfaces.IAddress"
    class=".address.AddressAddForm"
    layer="metrod.app.layer.IMetroDBrowserLayer"
    permission="zope.Public" />
    
  <z3c:template
    template="address.pt"
    for=".address.AddressAddForm"
    layer="metrod.app.layer.IMetroDBrowserLayer" />
-- 
View this message in context: 
http://www.nabble.com/z3c.form-and-subforms-in-an-AddForm--tf3929436.html#a11144644
Sent from the Zope3 - users mailing list archive at Nabble.com.

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to