Fixed #35103 -- Used provided error code and message when fields is set without a condition on UniqueConstraint.

This commit is contained in:
gabn88 2024-01-11 17:43:52 +01:00 committed by Sarah Boyce
parent 1979b1403a
commit e970bb7ca7
5 changed files with 89 additions and 23 deletions

View file

@ -282,27 +282,47 @@ PostgreSQL 15+.
.. attribute:: UniqueConstraint.violation_error_code
The error code used when ``ValidationError`` is raised during
:ref:`model validation <validating-objects>`. Defaults to ``None``.
The error code used when a ``ValidationError`` is raised during
:ref:`model validation <validating-objects>`.
This code is *not used* for :class:`UniqueConstraint`\s with
:attr:`~UniqueConstraint.fields` and without a
:attr:`~UniqueConstraint.condition`. Such :class:`~UniqueConstraint`\s have the
same error code as constraints defined with :attr:`.Field.unique` or in
:attr:`Meta.unique_together <django.db.models.Options.constraints>`.
Defaults to :attr:`.BaseConstraint.violation_error_code`, when either
:attr:`.UniqueConstraint.condition` is set or :attr:`.UniqueConstraint.fields`
is not set.
If :attr:`.UniqueConstraint.fields` is set without a
:attr:`.UniqueConstraint.condition`, defaults to the :attr:`Meta.unique_together
<django.db.models.Options.unique_together>` error code when there are multiple
fields, and to the :attr:`.Field.unique` error code when there is a single
field.
.. versionchanged:: 5.2
In older versions, the provided
:attr:`.UniqueConstraint.violation_error_code` was not used when
:attr:`.UniqueConstraint.fields` was set without a
:attr:`.UniqueConstraint.condition`.
``violation_error_message``
---------------------------
.. attribute:: UniqueConstraint.violation_error_message
The error message used when ``ValidationError`` is raised during
:ref:`model validation <validating-objects>`. Defaults to
:attr:`.BaseConstraint.violation_error_message`.
The error message used when a ``ValidationError`` is raised during
:ref:`model validation <validating-objects>`.
This message is *not used* for :class:`UniqueConstraint`\s with
:attr:`~UniqueConstraint.fields` and without a
:attr:`~UniqueConstraint.condition`. Such :class:`~UniqueConstraint`\s show the
same message as constraints defined with
:attr:`.Field.unique` or in
:attr:`Meta.unique_together <django.db.models.Options.constraints>`.
Defaults to :attr:`.BaseConstraint.violation_error_message`, when either
:attr:`.UniqueConstraint.condition` is set or :attr:`.UniqueConstraint.fields`
is not set.
If :attr:`.UniqueConstraint.fields` is set without a
:attr:`.UniqueConstraint.condition`, defaults to the :attr:`Meta.unique_together
<django.db.models.Options.unique_together>` error message when there are
multiple fields, and to the :attr:`.Field.unique` error message when there is a
single field.
.. versionchanged:: 5.2
In older versions, the provided
:attr:`.UniqueConstraint.violation_error_message` was not used when
:attr:`.UniqueConstraint.fields` was set without a
:attr:`.UniqueConstraint.condition`.

View file

@ -358,6 +358,11 @@ Miscellaneous
* ``HttpRequest.accepted_types`` is now sorted by the client's preference, based
on the request's ``Accept`` header.
* :attr:`.UniqueConstraint.violation_error_code` and
:attr:`.UniqueConstraint.violation_error_message` are now always used when
provided. Previously, these were ignored when :attr:`.UniqueConstraint.fields`
were set without a :attr:`.UniqueConstraint.condition`.
* The :func:`~django.template.context_processors.debug` context processor is no
longer included in the default project template.