That's really easy.
Register a custom form and override the widget:
<browser:page
name="edit"
for="my.site.content.foo.IFoo"
layer="my.site.interfaces.IMySiteLayer"
class=".foo.FooEditForm"
permission="cmf.ModifyPortalContent"
/>
# -*- coding: utf-8 -*-
from plone.dexterity.browser import edit
class FooEditForm(edit.DefaultEditForm):
def updateWidgets(self):
super(FooEditForm, self).updateWidgets()
parent = self.context.__parent__
if getattr(parent, 'whatever', None):
self.widgets['description'].mode = 'hidden'
The same works with addforms as well but is a bit different:
<adapter
for="Products.CMFCore.interfaces.IFolderish
my.site.interfaces.IMySiteLayer
plone.dexterity.interfaces.IDexterityFTI"
provides="zope.publisher.interfaces.browser.IBrowserPage"
factory=".foo.AddView"
name="foo"
/>
<class class=".foo.AddView">
<require
permission="cmf.AddPortalContent"
interface="zope.publisher.interfaces.browser.IBrowserPage"
/>
</class>
and the form:
from plone.dexterity.browser import add
class AddForm(add.DefaultAddForm):
portal_type = 'foo'
def updateWidgets(self):
super(AddForm, self).updateWidgets()
if getattr(self.context, 'whatever', None):
self.widgets['description'].mode = 'hidden'
class AddView(add.DefaultAddView):
form = AddForm