#33724: Changing from list to set in `exclude` raises errors, and is not
documented.
-------------------------------------+-------------------------------------
Reporter: אורי | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 4.1
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):
* cc: Carlton Gibson (added)
Comment:
Replying to [comment:6 Claude Paroz]:
> Still I wonder if the performance gain is worth the loss of consistency.
I wouldn't mind if exclude was defined to always be a set, but having to
code defensively by expecting list or set is a loss in my point of view.
All built-in methods do exactly the same number of conversion as before
1ea7e3157d1f9b4db71e768d75ea57e47dbd49f9 just using `set(...)` instead of
`list(...)`. IMO we can document `set` as the preferable option, e.g.
{{{#!diff
diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt
index 9aa9486f4a..8601a19e64 100644
--- a/docs/ref/models/instances.txt
+++ b/docs/ref/models/instances.txt
@@ -252,9 +252,9 @@ The first step ``full_clean()`` performs is to clean
each individual field.
.. method:: Model.clean_fields(exclude=None)
This method will validate all fields on your model. The optional
``exclude``
-argument lets you provide a list of field names to exclude from
validation. It
-will raise a :exc:`~django.core.exceptions.ValidationError` if any fields
fail
-validation.
+argument lets you provide a ``set`` of field names to exclude from
validation.
+It will raise a :exc:`~django.core.exceptions.ValidationError` if any
fields
+fail validation.
The second step ``full_clean()`` performs is to call
:meth:`Model.clean()`.
This method should be overridden to perform custom validation on your
model.
@@ -355,8 +355,8 @@ uniqueness constraints defined via
:attr:`.Field.unique`,
:attr:`.Field.unique_for_date`, :attr:`.Field.unique_for_month`,
:attr:`.Field.unique_for_year`, or :attr:`Meta.unique_together
<django.db.models.Options.unique_together>` on your model instead of
individual
-field values. The optional ``exclude`` argument allows you to provide a
list of
-field names to exclude from validation. It will raise a
+field values. The optional ``exclude`` argument allows you to provide a
``set``
+of field names to exclude from validation. It will raise a
:exc:`~django.core.exceptions.ValidationError` if any fields fail
validation.
:class:`~django.db.models.UniqueConstraint`\s defined in the
@@ -380,7 +380,7 @@ Finally, ``full_clean()`` will check any other
constraints on your model.
This method validates all constraints defined in
:attr:`Meta.constraints <django.db.models.Options.constraints>`. The
-optional ``exclude`` argument allows you to provide a list of field names
to
+optional ``exclude`` argument allows you to provide a ``set`` of field
names to
exclude from validation. It will raise a
:exc:`~django.core.exceptions.ValidationError` if any constraints fail
validation.
diff --git a/docs/releases/4.1.txt b/docs/releases/4.1.txt
index 7b922256ec..a1ec53e2ac 100644
--- a/docs/releases/4.1.txt
+++ b/docs/releases/4.1.txt
@@ -561,6 +561,10 @@ Miscellaneous
``URLResolver._callback_strs``, and ``URLPattern.lookup_str()`` are
moved to ``django.contrib.admindocs.utils``.
+* Custom :meth:`.Model.clean_fields`, :meth:`.Model.validate_unique`, and
+ :meth:`.Model.validate_constraints` methods now convert an ``exclude``
+ value to the ``set``.
+
.. _deprecated-features-4.1:
}}}
Also, passing lists still works, but would not be documented anymore. What
do you think?
--
Ticket URL: <https://code.djangoproject.com/ticket/33724#comment:9>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070180e0ccf889-0512b872-e3c8-4b8b-9a49-b0155b3d1f67-000000%40eu-central-1.amazonses.com.