web-dev-qa-db-ja.com

検証済みのフォームにエラーを挿入しますか?

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

これらのエラーを検証済みのフォームに挿入して、通常のフォームエラー表示方法で表示できるようにする方法はありますか(または、より適切な代替方法はありますか)?

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

93
Parand

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"

87
John Millikin

Django 1.7+の場合、_form._errors_に直接アクセスする代わりにform.add_error()を使用する必要があります。

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

100
rstuart85
14
Jonny Buchanan