5.1.txt 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. ============================================
  2. Django 5.1 release notes - UNDER DEVELOPMENT
  3. ============================================
  4. *Expected August 2024*
  5. Welcome to Django 5.1!
  6. These release notes cover the :ref:`new features <whats-new-5.1>`, as well as
  7. some :ref:`backwards incompatible changes <backwards-incompatible-5.1>` you'll
  8. want to be aware of when upgrading from Django 5.0 or earlier. We've
  9. :ref:`begun the deprecation process for some features
  10. <deprecated-features-5.1>`.
  11. See the :doc:`/howto/upgrade-version` guide if you're updating an existing
  12. project.
  13. Python compatibility
  14. ====================
  15. Django 5.1 supports Python 3.10, 3.11, and 3.12. We **highly recommend** and
  16. only officially support the latest release of each series.
  17. .. _whats-new-5.1:
  18. What's new in Django 5.1
  19. ========================
  20. Minor features
  21. --------------
  22. :mod:`django.contrib.admin`
  23. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. * ...
  25. :mod:`django.contrib.admindocs`
  26. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. * ...
  28. :mod:`django.contrib.auth`
  29. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  30. * The default iteration count for the PBKDF2 password hasher is increased from
  31. 720,000 to 870,000.
  32. :mod:`django.contrib.contenttypes`
  33. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  34. * ...
  35. :mod:`django.contrib.gis`
  36. ~~~~~~~~~~~~~~~~~~~~~~~~~
  37. * ...
  38. :mod:`django.contrib.messages`
  39. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  40. * ...
  41. :mod:`django.contrib.postgres`
  42. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  43. * ...
  44. :mod:`django.contrib.redirects`
  45. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  46. * ...
  47. :mod:`django.contrib.sessions`
  48. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  49. * ...
  50. :mod:`django.contrib.sitemaps`
  51. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  52. * ...
  53. :mod:`django.contrib.sites`
  54. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  55. * ...
  56. :mod:`django.contrib.staticfiles`
  57. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  58. * ...
  59. :mod:`django.contrib.syndication`
  60. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  61. * ...
  62. Asynchronous views
  63. ~~~~~~~~~~~~~~~~~~
  64. * ...
  65. Cache
  66. ~~~~~
  67. * ...
  68. CSRF
  69. ~~~~
  70. * ...
  71. Decorators
  72. ~~~~~~~~~~
  73. * ...
  74. Email
  75. ~~~~~
  76. * ...
  77. Error Reporting
  78. ~~~~~~~~~~~~~~~
  79. * ...
  80. File Storage
  81. ~~~~~~~~~~~~
  82. * ...
  83. File Uploads
  84. ~~~~~~~~~~~~
  85. * ...
  86. Forms
  87. ~~~~~
  88. * In order to improve accessibility and enable screen readers to associate
  89. fieldsets with their help text, the form fieldset now includes the
  90. ``aria-describedby`` HTML attribute.
  91. Generic Views
  92. ~~~~~~~~~~~~~
  93. * ...
  94. Internationalization
  95. ~~~~~~~~~~~~~~~~~~~~
  96. * ...
  97. Logging
  98. ~~~~~~~
  99. * ...
  100. Management Commands
  101. ~~~~~~~~~~~~~~~~~~~
  102. * ...
  103. Migrations
  104. ~~~~~~~~~~
  105. * ...
  106. Models
  107. ~~~~~~
  108. * :meth:`.QuerySet.explain` now supports the ``generic_plan`` option on
  109. PostgreSQL 16+.
  110. * :class:`~django.db.models.expressions.RowRange` now accepts positive integers
  111. for the ``start`` argument and negative integers for the ``end`` argument.
  112. * The new ``exclusion`` argument of
  113. :class:`~django.db.models.expressions.RowRange` and
  114. :class:`~django.db.models.expressions.ValueRange` allows excluding rows,
  115. groups, and ties from the window frames.
  116. Requests and Responses
  117. ~~~~~~~~~~~~~~~~~~~~~~
  118. * ...
  119. Security
  120. ~~~~~~~~
  121. * ...
  122. Serialization
  123. ~~~~~~~~~~~~~
  124. * ...
  125. Signals
  126. ~~~~~~~
  127. * ...
  128. Templates
  129. ~~~~~~~~~
  130. * Custom tags may now set extra data on the ``Parser`` object that will later
  131. be made available on the ``Template`` instance. Such data may be used, for
  132. example, by the template loader, or other template clients.
  133. * The new :ttag:`{% query_string %} <query_string>` template tag allows
  134. changing a :class:`~django.http.QueryDict` instance for use in links, for
  135. example, to generate a link to the next page while keeping any filtering
  136. options in place.
  137. Tests
  138. ~~~~~
  139. * :meth:`~django.test.SimpleTestCase.assertContains`,
  140. :meth:`~django.test.SimpleTestCase.assertNotContains`, and
  141. :meth:`~django.test.SimpleTestCase.assertInHTML` assertions now add haystacks
  142. to assertion error messages.
  143. * The Django test runner now supports a ``--screenshots`` option to save
  144. screenshots for Selenium tests.
  145. * The :class:`~django.test.RequestFactory`,
  146. :class:`~django.test.AsyncRequestFactory`, :class:`~django.test.Client`, and
  147. :class:`~django.test.AsyncClient` classes now support the ``query_params``
  148. parameter, which accepts a dictionary of query string keys and values. This
  149. allows setting query strings on any HTTP methods more easily.
  150. .. code-block:: python
  151. self.client.post("/items/1", query_params={"action": "delete"})
  152. await self.async_client.post("/items/1", query_params={"action": "delete"})
  153. URLs
  154. ~~~~
  155. * ...
  156. Utilities
  157. ~~~~~~~~~
  158. * ...
  159. Validators
  160. ~~~~~~~~~~
  161. * ...
  162. .. _backwards-incompatible-5.1:
  163. Backwards incompatible changes in 5.1
  164. =====================================
  165. Database backend API
  166. --------------------
  167. This section describes changes that may be needed in third-party database
  168. backends.
  169. * ...
  170. :mod:`django.contrib.gis`
  171. -------------------------
  172. * Support for PostGIS 2.5 is removed.
  173. Dropped support for MariaDB 10.4
  174. --------------------------------
  175. Upstream support for MariaDB 10.4 ends in June 2024. Django 5.1 supports
  176. MariaDB 10.5 and higher.
  177. Dropped support for PostgreSQL 12
  178. ---------------------------------
  179. Upstream support for PostgreSQL 12 ends in November 2024. Django 5.1 supports
  180. PostgreSQL 13 and higher.
  181. Miscellaneous
  182. -------------
  183. * In order to improve accessibility, the admin's changelist filter is now
  184. rendered in a ``<nav>`` tag instead of a ``<div>``.
  185. * :meth:`.SimpleTestCase.assertURLEqual` and
  186. :meth:`~django.test.SimpleTestCase.assertInHTML` now add ``": "`` to the
  187. ``msg_prefix``. This is consistent with the behavior of other assertions.
  188. .. _deprecated-features-5.1:
  189. Features deprecated in 5.1
  190. ==========================
  191. Miscellaneous
  192. -------------
  193. * The ``ModelAdmin.log_deletion()`` and ``LogEntryManager.log_action()``
  194. methods are deprecated. Subclasses should implement
  195. ``ModelAdmin.log_deletions()`` and ``LogEntryManager.log_actions()``
  196. instead.
  197. * The undocumented ``django.utils.itercompat.is_iterable()`` function and the
  198. ``django.utils.itercompat`` module are deprecated. Use
  199. ``isinstance(..., collections.abc.Iterable)`` instead.
  200. * The ``django.contrib.gis.geoip2.GeoIP2.coords()`` method is deprecated. Use
  201. ``django.contrib.gis.geoip2.GeoIP2.lon_lat()`` instead.
  202. Features removed in 5.1
  203. =======================
  204. These features have reached the end of their deprecation cycle and are removed
  205. in Django 5.1.
  206. See :ref:`deprecated-features-4.2` for details on these changes, including how
  207. to remove usage of these features.
  208. * The ``BaseUserManager.make_random_password()`` method is removed.
  209. * The model's ``Meta.index_together`` option is removed.
  210. * The ``length_is`` template filter is removed.
  211. * The ``django.contrib.auth.hashers.SHA1PasswordHasher``,
  212. ``django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher``, and
  213. ``django.contrib.auth.hashers.UnsaltedMD5PasswordHasher`` are removed.
  214. * The model ``django.contrib.postgres.fields.CICharField``,
  215. ``django.contrib.postgres.fields.CIEmailField``, and
  216. ``django.contrib.postgres.fields.CITextField`` are removed, except for
  217. support in historical migrations.
  218. * The ``django.contrib.postgres.fields.CIText`` mixin is removed.
  219. * The ``map_width`` and ``map_height`` attributes of ``BaseGeometryWidget`` are
  220. removed.
  221. * The ``SimpleTestCase.assertFormsetError()`` method is removed.
  222. * The ``TransactionTestCase.assertQuerysetEqual()`` method is removed.
  223. * Support for passing encoded JSON string literals to ``JSONField`` and
  224. associated lookups and expressions is removed.
  225. * Support for passing positional arguments to ``Signer`` and
  226. ``TimestampSigner`` is removed.
  227. * The ``DEFAULT_FILE_STORAGE`` and ``STATICFILES_STORAGE`` settings is removed.
  228. * The ``django.core.files.storage.get_storage_class()`` function is removed.