2023-01-06 06:31:13 +00:00
|
|
|
============================================
|
|
|
|
Django 5.0 release notes - UNDER DEVELOPMENT
|
|
|
|
============================================
|
|
|
|
|
|
|
|
*Expected December 2023*
|
|
|
|
|
|
|
|
Welcome to Django 5.0!
|
|
|
|
|
|
|
|
These release notes cover the :ref:`new features <whats-new-5.0>`, as well as
|
|
|
|
some :ref:`backwards incompatible changes <backwards-incompatible-5.0>` you'll
|
|
|
|
want to be aware of when upgrading from Django 4.2 or earlier. We've
|
|
|
|
:ref:`begun the deprecation process for some features
|
|
|
|
<deprecated-features-5.0>`.
|
|
|
|
|
|
|
|
See the :doc:`/howto/upgrade-version` guide if you're updating an existing
|
|
|
|
project.
|
|
|
|
|
|
|
|
Python compatibility
|
|
|
|
====================
|
|
|
|
|
|
|
|
Django 5.0 supports Python 3.10, 3.11, and 3.12. We **highly recommend** and
|
|
|
|
only officially support the latest release of each series.
|
|
|
|
|
2023-01-18 08:46:01 +00:00
|
|
|
The Django 4.2.x series is the last to support Python 3.8 and 3.9.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
Third-party library support for older version of Django
|
|
|
|
=======================================================
|
|
|
|
|
|
|
|
Following the release of Django 5.0, we suggest that third-party app authors
|
|
|
|
drop support for all versions of Django prior to 4.2. At that time, you should
|
|
|
|
be able to run your package's tests using ``python -Wd`` so that deprecation
|
|
|
|
warnings appear. After making the deprecation warning fixes, your app should be
|
|
|
|
compatible with Django 5.0.
|
|
|
|
|
|
|
|
.. _whats-new-5.0:
|
|
|
|
|
|
|
|
What's new in Django 5.0
|
|
|
|
========================
|
|
|
|
|
2023-02-16 12:23:24 +00:00
|
|
|
Facet filters in the admin
|
|
|
|
--------------------------
|
|
|
|
|
2023-03-05 13:01:19 +00:00
|
|
|
Facet counts are now shown for applied filters in the admin changelist when
|
2023-02-16 12:23:24 +00:00
|
|
|
toggled on via the UI. This behavior can be changed via the new
|
|
|
|
:attr:`.ModelAdmin.show_facets` attribute. For more information see
|
|
|
|
:ref:`facet-filters`.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
Minor features
|
|
|
|
--------------
|
|
|
|
|
|
|
|
:mod:`django.contrib.admin`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2023-02-08 17:37:32 +00:00
|
|
|
* The new :meth:`.AdminSite.get_log_entries` method allows customizing the
|
|
|
|
queryset for the site's listed log entries.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-03-06 14:24:39 +00:00
|
|
|
* The ``django.contrib.admin.AllValuesFieldListFilter``,
|
|
|
|
``ChoicesFieldListFilter``, ``RelatedFieldListFilter``, and
|
|
|
|
``RelatedOnlyFieldListFilter`` admin filters now handle multi-valued query
|
|
|
|
parameters.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
:mod:`django.contrib.admindocs`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2023-01-25 21:25:29 +00:00
|
|
|
* ...
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
:mod:`django.contrib.auth`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2023-01-25 21:25:29 +00:00
|
|
|
* The default iteration count for the PBKDF2 password hasher is increased from
|
2023-02-04 12:37:44 +00:00
|
|
|
600,000 to 720,000.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-02-13 23:24:35 +00:00
|
|
|
* ``AuthenticationMiddleware`` now adds an :meth:`.HttpRequest.auser`
|
|
|
|
asynchronous method that returns the currently logged-in user.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
:mod:`django.contrib.contenttypes`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.gis`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2023-01-13 16:48:27 +00:00
|
|
|
* The new
|
|
|
|
:class:`ClosestPoint() <django.contrib.gis.db.models.functions.ClosestPoint>`
|
|
|
|
function returns a 2-dimensional point on the geometry that is closest to
|
|
|
|
another geometry.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
:mod:`django.contrib.messages`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.postgres`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2023-02-14 20:06:45 +00:00
|
|
|
* The new :attr:`~.ExclusionConstraint.violation_error_code` attribute of
|
|
|
|
:class:`~django.contrib.postgres.constraints.ExclusionConstraint` allows
|
|
|
|
customizing the ``code`` of ``ValidationError`` raised during
|
|
|
|
:ref:`model validation <validating-objects>`.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
:mod:`django.contrib.redirects`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sessions`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sitemaps`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sites`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.staticfiles`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.syndication`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Cache
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
CSRF
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Decorators
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Email
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Error Reporting
|
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
2023-03-22 09:21:04 +00:00
|
|
|
* :func:`~django.views.decorators.debug.sensitive_variables` and
|
|
|
|
:func:`~django.views.decorators.debug.sensitive_post_parameters` can now be
|
|
|
|
used with asynchronous functions.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
File Storage
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
File Uploads
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Forms
|
|
|
|
~~~~~
|
|
|
|
|
2023-03-10 23:34:13 +00:00
|
|
|
* :attr:`.ChoiceField.choices` now accepts
|
|
|
|
:ref:`Choices classes <field-choices-enum-types>` directly instead of
|
|
|
|
requiring expansion with the ``choices`` attribute.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
Generic Views
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Internationalization
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Logging
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Management Commands
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Migrations
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Models
|
|
|
|
~~~~~~
|
|
|
|
|
2023-01-31 02:39:15 +00:00
|
|
|
* The new ``create_defaults`` argument of :meth:`.QuerySet.update_or_create`
|
|
|
|
and :meth:`.QuerySet.aupdate_or_create` methods allows specifying a different
|
|
|
|
field values for the create operation.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-02-14 20:06:45 +00:00
|
|
|
* The new ``violation_error_code`` attribute of
|
|
|
|
:class:`~django.db.models.BaseConstraint`,
|
|
|
|
:class:`~django.db.models.CheckConstraint`, and
|
|
|
|
:class:`~django.db.models.UniqueConstraint` allows customizing the ``code``
|
|
|
|
of ``ValidationError`` raised during
|
|
|
|
:ref:`model validation <validating-objects>`.
|
|
|
|
|
2023-03-10 23:34:13 +00:00
|
|
|
* :attr:`.Field.choices` now accepts
|
|
|
|
:ref:`Choices classes <field-choices-enum-types>` directly instead of
|
|
|
|
requiring expansion with the ``choices`` attribute.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
Requests and Responses
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Security
|
|
|
|
~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Serialization
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Signals
|
|
|
|
~~~~~~~
|
|
|
|
|
2020-11-07 10:19:20 +00:00
|
|
|
* The new :meth:`.Signal.asend` and :meth:`.Signal.asend_robust` methods allow
|
|
|
|
asynchronous signal dispatch. Signal receivers may be synchronous or
|
|
|
|
asynchronous, and will be automatically adapted to the correct calling style.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
|
|
|
Templates
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Tests
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
URLs
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Utilities
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Validators
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
.. _backwards-incompatible-5.0:
|
|
|
|
|
|
|
|
Backwards incompatible changes in 5.0
|
|
|
|
=====================================
|
|
|
|
|
|
|
|
Database backend API
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
This section describes changes that may be needed in third-party database
|
|
|
|
backends.
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
2023-01-31 02:39:15 +00:00
|
|
|
Using ``create_defaults__exact`` may now be required with ``QuerySet.update_or_create()``
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
:meth:`.QuerySet.update_or_create` now supports the parameter
|
|
|
|
``create_defaults``. As a consequence, any models that have a field named
|
|
|
|
``create_defaults`` that are used with an ``update_or_create()`` should specify
|
|
|
|
the field in the lookup with ``create_defaults__exact``.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
2023-02-07 13:18:58 +00:00
|
|
|
* The ``instance`` argument of the undocumented
|
|
|
|
``BaseModelFormSet.save_existing()`` method is renamed to ``obj``.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-01-31 18:05:03 +00:00
|
|
|
* The undocumented ``django.contrib.admin.helpers.checkbox`` is removed.
|
|
|
|
|
2023-03-01 22:13:00 +00:00
|
|
|
* Integer fields are now validated as 64-bit integers on SQLite to match the
|
|
|
|
behavior of ``sqlite3``.
|
|
|
|
|
2023-03-13 14:03:28 +00:00
|
|
|
* The undocumented ``Query.annotation_select_mask`` attribute is changed from a
|
|
|
|
set of strings to an ordered list of strings.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
.. _deprecated-features-5.0:
|
|
|
|
|
|
|
|
Features deprecated in 5.0
|
|
|
|
==========================
|
|
|
|
|
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
2023-01-18 10:08:39 +00:00
|
|
|
* The ``DjangoDivFormRenderer`` and ``Jinja2DivFormRenderer`` transitional form
|
|
|
|
renderers are deprecated.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-02-20 13:28:21 +00:00
|
|
|
* Passing positional arguments ``name`` and ``violation_error_message`` to
|
|
|
|
:class:`~django.db.models.BaseConstraint` is deprecated in favor of
|
|
|
|
keyword-only arguments.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
Features removed in 5.0
|
|
|
|
=======================
|
|
|
|
|
|
|
|
These features have reached the end of their deprecation cycle and are removed
|
|
|
|
in Django 5.0.
|
|
|
|
|
|
|
|
See :ref:`deprecated-features-4.0` for details on these changes, including how
|
|
|
|
to remove usage of these features.
|
|
|
|
|
2023-01-06 08:28:25 +00:00
|
|
|
* The ``SERIALIZE`` test setting is removed.
|
2023-01-06 06:31:13 +00:00
|
|
|
|
2023-01-06 08:33:02 +00:00
|
|
|
* The undocumented ``django.utils.baseconv`` module is removed.
|
|
|
|
|
2023-01-06 08:37:41 +00:00
|
|
|
* The undocumented ``django.utils.datetime_safe`` module is removed.
|
|
|
|
|
2023-01-06 11:30:23 +00:00
|
|
|
* The default value of the ``USE_TZ`` setting is changed from ``False`` to
|
|
|
|
``True``.
|
|
|
|
|
2023-01-06 11:55:14 +00:00
|
|
|
* The default sitemap protocol for sitemaps built outside the context of a
|
|
|
|
request is changed from ``'http'`` to ``'https'``.
|
|
|
|
|
2023-01-06 12:12:23 +00:00
|
|
|
* The ``extra_tests`` argument for ``DiscoverRunner.build_suite()`` and
|
|
|
|
``DiscoverRunner.run_tests()`` is removed.
|
|
|
|
|
2023-01-06 12:53:42 +00:00
|
|
|
* The ``django.contrib.postgres.aggregates.ArrayAgg``, ``JSONBAgg``, and
|
|
|
|
``StringAgg`` aggregates no longer return ``[]``, ``[]``, and ``''``,
|
|
|
|
respectively, when there are no rows.
|
|
|
|
|
2023-01-06 13:46:33 +00:00
|
|
|
* The ``USE_L10N`` setting is removed.
|
|
|
|
|
2023-01-09 08:03:38 +00:00
|
|
|
* The ``USE_DEPRECATED_PYTZ`` transitional setting is removed.
|
|
|
|
|
|
|
|
* Support for ``pytz`` timezones is removed.
|
|
|
|
|
2023-01-09 08:52:26 +00:00
|
|
|
* The ``is_dst`` argument is removed from:
|
|
|
|
|
|
|
|
* ``QuerySet.datetimes()``
|
|
|
|
* ``django.utils.timezone.make_aware()``
|
|
|
|
* ``django.db.models.functions.Trunc()``
|
|
|
|
* ``django.db.models.functions.TruncSecond()``
|
|
|
|
* ``django.db.models.functions.TruncMinute()``
|
|
|
|
* ``django.db.models.functions.TruncHour()``
|
|
|
|
* ``django.db.models.functions.TruncDay()``
|
|
|
|
* ``django.db.models.functions.TruncWeek()``
|
|
|
|
* ``django.db.models.functions.TruncMonth()``
|
|
|
|
* ``django.db.models.functions.TruncQuarter()``
|
|
|
|
* ``django.db.models.functions.TruncYear()``
|
|
|
|
|
2023-01-10 12:01:14 +00:00
|
|
|
* The ``django.contrib.gis.admin.GeoModelAdmin`` and ``OSMGeoAdmin`` classes
|
|
|
|
are removed.
|
|
|
|
|
2023-01-10 12:43:21 +00:00
|
|
|
* The undocumented ``BaseForm._html_output()`` method is removed.
|
|
|
|
|
2023-01-11 05:07:16 +00:00
|
|
|
* The ability to return a ``str``, rather than a ``SafeString``, when rendering
|
|
|
|
an ``ErrorDict`` and ``ErrorList`` is removed.
|
|
|
|
|
2023-01-06 06:31:13 +00:00
|
|
|
See :ref:`deprecated-features-4.1` for details on these changes, including how
|
|
|
|
to remove usage of these features.
|
|
|
|
|
2023-01-12 11:34:42 +00:00
|
|
|
* The ``SitemapIndexItem.__str__()`` method is removed.
|
2023-01-12 11:47:42 +00:00
|
|
|
|
|
|
|
* The ``CSRF_COOKIE_MASKED`` transitional setting is removed.
|
2023-01-12 12:00:18 +00:00
|
|
|
|
|
|
|
* The ``name`` argument of ``django.utils.functional.cached_property()`` is
|
|
|
|
removed.
|
2023-01-12 12:20:08 +00:00
|
|
|
|
|
|
|
* The ``opclasses`` argument of
|
|
|
|
``django.contrib.postgres.constraints.ExclusionConstraint`` is removed.
|
2023-01-12 13:32:00 +00:00
|
|
|
|
|
|
|
* The undocumented ability to pass ``errors=None`` to
|
|
|
|
``SimpleTestCase.assertFormError()`` and ``assertFormsetError()`` is removed.
|
2023-01-12 13:43:48 +00:00
|
|
|
|
|
|
|
* ``django.contrib.sessions.serializers.PickleSerializer`` is removed.
|
2023-01-12 18:13:22 +00:00
|
|
|
|
|
|
|
* The usage of ``QuerySet.iterator()`` on a queryset that prefetches related
|
|
|
|
objects without providing the ``chunk_size`` argument is no longer allowed.
|
2023-01-12 18:31:49 +00:00
|
|
|
|
|
|
|
* Passing unsaved model instances to related filters is no longer allowed.
|
2023-01-13 04:49:36 +00:00
|
|
|
|
|
|
|
* ``created=True`` is required in the signature of
|
|
|
|
``RemoteUserBackend.configure_user()`` subclasses.
|
2023-01-13 05:03:29 +00:00
|
|
|
|
|
|
|
* Support for logging out via ``GET`` requests in the
|
|
|
|
``django.contrib.auth.views.LogoutView`` and
|
|
|
|
``django.contrib.auth.views.logout_then_login()`` is removed.
|
2023-01-13 07:22:41 +00:00
|
|
|
|
|
|
|
* The ``django.utils.timezone.utc`` alias to ``datetime.timezone.utc`` is
|
|
|
|
removed.
|
2023-01-13 07:31:30 +00:00
|
|
|
|
|
|
|
* Passing a response object and a form/formset name to
|
|
|
|
``SimpleTestCase.assertFormError()`` and ``assertFormSetError()`` is no
|
|
|
|
longer allowed.
|
2023-01-13 07:36:50 +00:00
|
|
|
|
|
|
|
* The ``django.contrib.gis.admin.OpenLayersWidget`` is removed.
|
2023-01-13 08:09:58 +00:00
|
|
|
|
|
|
|
+ The ``django.contrib.auth.hashers.CryptPasswordHasher`` is removed.
|
2023-01-13 08:32:35 +00:00
|
|
|
|
|
|
|
* The ``"django/forms/default.html"`` and
|
|
|
|
``"django/forms/formsets/default.html"`` templates are removed.
|
|
|
|
|
|
|
|
* The default form and formset rendering style is changed to the div-based.
|
2023-01-13 08:49:28 +00:00
|
|
|
|
|
|
|
* Passing ``nulls_first=False`` or ``nulls_last=False`` to ``Expression.asc()``
|
|
|
|
and ``Expression.desc()`` methods, and the ``OrderBy`` expression is no
|
|
|
|
longer allowed.
|