2013-07-04 29 views
1

我有一個z3c.form,在執行表單操作之前無法知道一些錯誤。我想在字段上顯示這些錯誤,而不是在全局表單狀態消息中顯示。任何可以構造並向Form.update()中的小部件注入錯誤?在z3c.form表單中注入字段錯誤表單操作處理程序

例子:

@z3c.form.button.buttonAndHandler(_('Make Report'), name='report') 
def report(self, action): 

    data, errors = self.extractData() 

    if errors: 
     self.status = "Please correct errors" 
     return 

    # Create sample item which we can consume in the page template 
    try: 
     self.output = make_report(self.context, self.request, data, filters=filters) 
    except zope.interface.Invalid as e: 
     self.status = e.message 
     self.errors = True 
     # How to target the error message to a particular field here 
     return 

    self.status = _(u"Report complete") 

回答

1

在表單動作中,您可以引發WidgetActionExecutionError,將字段名稱和無效例外與要顯示的消息一起傳遞。然後,z3c.form將負責將錯誤附加到正確的小部件並進行渲染,以便您不必自己完成所有步驟。

爲您的代碼,這將是這樣的:

from z3c.form.interfaces import WidgetActionExecutionError 

@z3c.form.button.buttonAndHandler(_('Make Report'), name='report') 
def report(self, action): 

    data, errors = self.extractData() 

    if errors: 
     self.status = "Please correct errors" 
     return 

    # Create sample item which we can consume in the page template 
    try: 
     self.output = make_report(self.context, self.request, data, filters=filters) 
    except zope.interface.Invalid as e: 
     raise WidgetActionExecutionError('target_field_name', e) 

    self.status = _(u"Report complete") 

的另一個例子見http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#validating-in-action-handlers

+0

有趣;我一定是太接近代碼才能看到異常處理程序。 –