答えはノーのようです:グループ/フィールドセットごとに 1 回z3c.form.group.Group.extractData
呼び出し、この呼び出しには既に不変の検証が含まれています。z3c.form.form.BaseForm.extractData
独自のhandlerを登録する代わりに、extractDataを上書きすることもできます。
from plone.directives import form, dexterity
from z3c.form.interfaces import ActionExecutionError,WidgetActionExecutionError
# ...
class EditForm(dexterity.EditForm):
grok.context(IMyEvent)
def extractData(self, setErrors=True):
data, errors = super(EditForm, self).extractData(setErrors)
if not None in(data['start'], data['end']):
if data['end'] < data['start']:
raise WidgetActionExecutionError('end', Invalid(_(u"End date should not lie before the start date.")))
if data['end'] - data['start'] > datetime.timedelta(days=7):
raise WidgetActionExecutionError('end', Invalid(_(u"Duration of convention should be shorter than seven (7) days.")))
return data, errors
このクラスは、form.SchemaForm ではなく、Dexterity のデフォルト ハンドラを含む dexterity.EditForm から派生することに注意してください。
WidgetActionExecutionError
ただし、確実には機能しません。一部のフィールドでは、「KeyError」が生成されます。