[Grok-dev] Add forms - one object type to multiple object types
Darryl Cousins
darryl at darrylcousins.net.nz
Sat Mar 10 18:54:28 EST 2007
On Sun, 2007-03-11 at 12:45 +1300, Darryl Cousins wrote:
> Hi,
>
> I'm trying out a simple site type app with grok.
>
> I've 3 content types: Site, Section and Page. Add form for page begins::
>
> class Add(grok.AddForm):
> grok.context(Site)
> grok.name('addpage')
>
> So now I can add pages to Sites. But I want also to add them to
> Sections. So the Add class needs a different context:
> grok.context(Section).
>
> It seems that I need to make a new add class in order to do so, one for
> Site and the other for Section.
>
> Using zcml I would have been able to register the add class for both
> Sites and Sections. Here (as I see from my low stand point) it seems not
> so straight forward.
>
> Thoughts?
>
> Kind regards,
> Darryl
Hi again,
Actually it wasn't so bad as I thought. I can re-use the grok.name
(things start falling into place).
So having the 2 separate add classes works like this:
class Add(grok.AddForm):
grok.name('addpage')
form_fields = grok.Fields(
id=schema.TextLine(title=u"id"))
form_fields += grok.AutoFields(Page)
@grok.action(_('Add page'))
def add(self, id, **data):
new = Page(**data)
self.context[id] = new
self.redirect(self.url(self.context))
@grok.action(_('Cancel'), validator=always_good)
def cancel(self, **data):
self.redirect(self.url(self.context))
class AddToSite(Add):
grok.context(Site)
class AddToSection(Add):
grok.context(Section)
Regards,
Darryl
More information about the Grok-dev
mailing list