[Zope3-Users] Standalone forms for z3c.form groups

Fernando Correa Neto fcdoth at gmail.com
Sun Feb 10 11:03:58 EST 2008

Hello there!

I've been playing with z3c.form for quite a while and have drunk a lot
of its Kool-aid already and I decided that I would need a reference
widget/gadget. Widget in a sense of simple html representation and
gadget in a sense of really complex and nasty stuff under the
hood....think of Vista gadgets ;).
Anyways, I've started developing that and one of the requirements is
that if there is no reference in the source reference, then it would
allow for creating a new reference by simply clicking in the '
Register new %(field_name)s' that opens a ajax modal window with the
group-subform(?) loaded inside of it. IOW, one would not need to
navigate away from the original form to create a new reference if
there is no reference in the source. All the exception handling will
be treated to address permission issues while creating new source
reference objects.

My main question now is: Am I allowed to provide a html form for a
group form so I can load its fields inside the ajax modal window? I
know I can access the group form like this:

(Pdb) self
<AjaxReferenceGadget 'form.widgets.place'>
(Pdb) self.__parent__.form
<processmanager.browser.forms.PlaceSupplierGroup object at 0x3692450>
(Pdb) self.__parent__.form.update()
(Pdb) self.__parent__.form.render()
*** ContentProviderLookupError: pagelet

But rendering it would be a different story as you see.
So, what I'm thinking to have a "modal" form that shows the fields of
a group form like this:

<div class="row">
          <label for="form-widgets-id">ID</label>
          <input type="text" id="form-widgets-id"
                 class="text-widget required textline-field"
                 value="" />
        <div class="row">
          <label for="form-widgets-name">Name</label>
          <input type="text" id="form-widgets-name" name="form.widgets.name"
                 class="text-widget required textline-field"
                 value="" />
       <div class="action">
          <input type="submit" id="form-buttons-add" name="form.buttons.add"
                 class="submit-widget button-field" value="Register"
injectTheContentOfThisModalFormIntoTheOriginalForm()" />

1) Main form loads;
2) No reference was found in the vocabulary of the reference field and
a button is displayed labelled with "Register new ...";
3) By clicking on the button, the modal window opens up and try to
load (via ajax) the group form fields in it;
At this point the widget would be responsible for setting up the
markup of the group form by doing python registrations on-the-fly ( i
guess)...meaning, providing enough context so the form above can be
loaded/rendered properly.

The reason I need this widget and not a subform as pointed in z3c.form
doctests, is that I am going to have loads of reference fields in this
app and will need something that can be reused in a quick and
consistent way. Creating subforms for all of this object fields would
not be good for this case.

Any ideas on how to render a group form?
Also, can anybody validate if what I am trying to do is way too much
and not the correct way of doing it?


More information about the Zope3-users mailing list