109

ユーザー入力値を検証した後、form.Formさらに処理するためにそれらを別の (外部) プロセスに渡します。この外部プロセスは、値のさらなるエラーを検出する可能性があります。

これらのエラーを既に検証されたフォームに挿入して、通常のフォームエラー表示方法で表示できるようにする方法はありますか (または、より良い代替アプローチがあります)。

1 つの提案は、フォーム検証に外部処理を含めることでした。これは、外部プロセスが単なる検証以上のことを行うため、理想的ではありません。

4

4 に答える 4

127

Django 1.7 以降では、直接form.add_error()アクセスする代わりに使用する必要がありますform._errors

ドキュメント: https://docs.djangoproject.com/en/stable/ref/forms/api/#django.forms.Form.add_error

于 2015-01-21T01:45:47.490 に答える
96

Form._errors標準的な辞書のように扱うことができます。ErrorListクラスを使用し、既存のリストにエラーを追加するのは良い形式と考えられています。

from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")

また、フィールド以外のエラーを追加する場合は、の代わりにdjango.forms.forms.NON_FIELD_ERRORS(デフォルトで) を使用します。"__all__""myfield"

于 2008-10-09T19:49:08.800 に答える
13

_errorsフォームの属性にエラーの詳細を直接追加できます。

https://docs.djangoproject.com/en/1.5/ref/forms/validation/#completed-later https://docs.djangoproject.com/en/1.6/ref/forms/validation/#modifying-field-errors

于 2008-10-09T19:48:31.437 に答える
5

特定のフィールドにエラーを追加:

form.add_error('fieldName', 'error description')

**非フィールドにエラーを追加**

form.add_error(None, 'error description')
#Only pass None instead of field name
于 2020-02-17T08:14:05.170 に答える