Fixed #16192 -- Made unique error messages in ModelForm customizable.

Overriding the error messages now works for both unique fields, unique_together
and unique_for_date.

This patch changed the overriding logic to allow customizing NON_FIELD_ERRORS
since previously only fields' errors were customizable.

Refs #20199.

Thanks leahculver for the suggestion.
This commit is contained in:
Loic Bistuer 2014-02-04 01:31:27 +07:00 committed by Tim Graham
parent 65131911db
commit 8847a0c601
11 changed files with 142 additions and 34 deletions

View file

@ -124,6 +124,15 @@ ValidationError
:ref:`Model Field Validation <validating-objects>` and the
:doc:`Validator Reference </ref/validators>`.
NON_FIELD_ERRORS
~~~~~~~~~~~~~~~~
.. data:: NON_FIELD_ERRORS
``ValidationError``\s that don't belong to a particular field in a form
or model are classified as ``NON_FIELD_ERRORS``. This constant is used
as a key in dictonaries that otherwise map fields to their respective
list of errors.
.. currentmodule:: django.core.urlresolvers
URL Resolver exceptions

View file

@ -233,8 +233,12 @@ field will raise. Pass in a dictionary with keys matching the error messages you
want to override.
Error message keys include ``null``, ``blank``, ``invalid``, ``invalid_choice``,
and ``unique``. Additional error message keys are specified for each field in
the `Field types`_ section below.
``unique``, and ``unique_for_date``. Additional error message keys are
specified for each field in the `Field types`_ section below.
.. versionadded:: 1.7
The ``unique_for_date`` error message key was added.
``help_text``
-------------

View file

@ -151,8 +151,8 @@ access to more than a single field::
Any :exc:`~django.core.exceptions.ValidationError` exceptions raised by
``Model.clean()`` will be stored in a special key error dictionary key,
``NON_FIELD_ERRORS``, that is used for errors that are tied to the entire model
instead of to a specific field::
:data:`~django.core.exceptions.NON_FIELD_ERRORS`, that is used for errors
that are tied to the entire model instead of to a specific field::
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
try:

View file

@ -321,6 +321,11 @@ Django quotes column and table names behind the scenes.
:class:`~django.db.models.ManyToManyField`, try using a signal or
an explicit :attr:`through <ManyToManyField.through>` model.
.. versionchanged:: 1.7
The ``ValidationError`` raised during model validation when the
constraint is violated has the ``unique_together`` error code.
``index_together``
------------------