Am 19.05.2008 um 18:51 schrieb Charlie Clark:

That's probably the easiest solution at the moment although it would be nice to be able to declare this in the schema. I suppose two different interfaces à la IObject and IMutableObject provide a way. I find fiddling with the form fields too easy to mess up! I think the only thing that's missing from this is a nicer way of getting the portal_type. As this is configurable in the ZMI and perfectly possible to have several types deriving from the same class and, therefore, from the same interface. Although as with browser views this should no longer be possible. I can't see an easy way of doing this but it seems to me much more natural to do this in the interface rather than in the view as it's essentially declarative work. Maybe a dedicated schema field for CMF Types and associated hidden widget?

portal_type = CMFDefault.schema.ContentType(title=u"portal type")

Obviously that won't work but it seems it should be possible to add the portal_type logic to the base form as this should be true for all add forms for CMF objects, shouldn't it?

in ContentAddFormBase

    def setUpWidgets(self, ignore_request=False):
        self.widgets['portal_type'].hide = True

    def form_fields(self):
        fields = form.FormFields(
        return fields

add forms now simply need to define their portal_type and extend the fields:

    portal_type = u"Textbody"

    def form_fields(self):
fields = (super(TextAdd, self).form_fields() + form.FormFields(ITextbody))
        return fields

I'm not sure if it's good style to do this using properties but it seems to work for and I find it less of a source of copy and paste errors.

Charlie Clark
Helmholtzstr. 20
D- 40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226

Zope-CMF maillist  -

See for bug reports and feature requests

Reply via email to