1

フォームアクションが実行される前にいくつかのエラーを知ることができない z3c.form があります。グローバル フォーム ステータス メッセージではなく、フィールドにこれらのエラーを表示したいと思います。Form.update()でウィジェットを構築してエラーを挿入するにはどうすればよいですか?

例:

@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")
4

2 に答える 2

1

formlib では、次の形式で見つけることができるset_invariant_errorメソッドでこのタスクを解決しました:

z3c.form にはほとんど苦労せずに再利用できると思います

于 2013-07-04T09:36:13.483 に答える
1

フォーム アクション内で WidgetActionExecutionError を発生させ、フィールド名と Invalid 例外を表示したいメッセージと共に渡すことができます。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-b​​ehaviour/validation.html#validating-in-action-handlersを参照してください。

于 2013-07-05T20:41:59.003 に答える