5.1.txt 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  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. * :meth:`.QuerySet.order_by` now supports ordering by annotation transforms
  117. such as ``JSONObject`` keys and ``ArrayAgg`` indices.
  118. Requests and Responses
  119. ~~~~~~~~~~~~~~~~~~~~~~
  120. * ...
  121. Security
  122. ~~~~~~~~
  123. * ...
  124. Serialization
  125. ~~~~~~~~~~~~~
  126. * ...
  127. Signals
  128. ~~~~~~~
  129. * ...
  130. Templates
  131. ~~~~~~~~~
  132. * Custom tags may now set extra data on the ``Parser`` object that will later
  133. be made available on the ``Template`` instance. Such data may be used, for
  134. example, by the template loader, or other template clients.
  135. * The new :ttag:`{% query_string %} <query_string>` template tag allows
  136. changing a :class:`~django.http.QueryDict` instance for use in links, for
  137. example, to generate a link to the next page while keeping any filtering
  138. options in place.
  139. Tests
  140. ~~~~~
  141. * :meth:`~django.test.SimpleTestCase.assertContains`,
  142. :meth:`~django.test.SimpleTestCase.assertNotContains`, and
  143. :meth:`~django.test.SimpleTestCase.assertInHTML` assertions now add haystacks
  144. to assertion error messages.
  145. * The Django test runner now supports a ``--screenshots`` option to save
  146. screenshots for Selenium tests.
  147. * The :class:`~django.test.RequestFactory`,
  148. :class:`~django.test.AsyncRequestFactory`, :class:`~django.test.Client`, and
  149. :class:`~django.test.AsyncClient` classes now support the ``query_params``
  150. parameter, which accepts a dictionary of query string keys and values. This
  151. allows setting query strings on any HTTP methods more easily.
  152. .. code-block:: python
  153. self.client.post("/items/1", query_params={"action": "delete"})
  154. await self.async_client.post("/items/1", query_params={"action": "delete"})
  155. * The new :meth:`.SimpleTestCase.assertNotInHTML` assertion allows testing that
  156. an HTML fragment is not contained in the given HTML haystack.
  157. URLs
  158. ~~~~
  159. * ...
  160. Utilities
  161. ~~~~~~~~~
  162. * ...
  163. Validators
  164. ~~~~~~~~~~
  165. * ...
  166. .. _backwards-incompatible-5.1:
  167. Backwards incompatible changes in 5.1
  168. =====================================
  169. Database backend API
  170. --------------------
  171. This section describes changes that may be needed in third-party database
  172. backends.
  173. * ...
  174. :mod:`django.contrib.gis`
  175. -------------------------
  176. * Support for PostGIS 2.5 is removed.
  177. * Support for PROJ < 6 is removed.
  178. * Support for GDAL 2.4 is removed.
  179. Dropped support for MariaDB 10.4
  180. --------------------------------
  181. Upstream support for MariaDB 10.4 ends in June 2024. Django 5.1 supports
  182. MariaDB 10.5 and higher.
  183. Dropped support for PostgreSQL 12
  184. ---------------------------------
  185. Upstream support for PostgreSQL 12 ends in November 2024. Django 5.1 supports
  186. PostgreSQL 13 and higher.
  187. Miscellaneous
  188. -------------
  189. * In order to improve accessibility, the admin's changelist filter is now
  190. rendered in a ``<nav>`` tag instead of a ``<div>``.
  191. * :meth:`.SimpleTestCase.assertURLEqual` and
  192. :meth:`~django.test.SimpleTestCase.assertInHTML` now add ``": "`` to the
  193. ``msg_prefix``. This is consistent with the behavior of other assertions.
  194. .. _deprecated-features-5.1:
  195. Features deprecated in 5.1
  196. ==========================
  197. Miscellaneous
  198. -------------
  199. * The ``ModelAdmin.log_deletion()`` and ``LogEntryManager.log_action()``
  200. methods are deprecated. Subclasses should implement
  201. ``ModelAdmin.log_deletions()`` and ``LogEntryManager.log_actions()``
  202. instead.
  203. * The undocumented ``django.utils.itercompat.is_iterable()`` function and the
  204. ``django.utils.itercompat`` module are deprecated. Use
  205. ``isinstance(..., collections.abc.Iterable)`` instead.
  206. * The ``django.contrib.gis.geoip2.GeoIP2.coords()`` method is deprecated. Use
  207. ``django.contrib.gis.geoip2.GeoIP2.lon_lat()`` instead.
  208. * The ``django.contrib.gis.geoip2.GeoIP2.open()`` method is deprecated. Use the
  209. :class:`~django.contrib.gis.geoip2.GeoIP2` constructor instead.
  210. Features removed in 5.1
  211. =======================
  212. These features have reached the end of their deprecation cycle and are removed
  213. in Django 5.1.
  214. See :ref:`deprecated-features-4.2` for details on these changes, including how
  215. to remove usage of these features.
  216. * The ``BaseUserManager.make_random_password()`` method is removed.
  217. * The model's ``Meta.index_together`` option is removed.
  218. * The ``length_is`` template filter is removed.
  219. * The ``django.contrib.auth.hashers.SHA1PasswordHasher``,
  220. ``django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher``, and
  221. ``django.contrib.auth.hashers.UnsaltedMD5PasswordHasher`` are removed.
  222. * The model ``django.contrib.postgres.fields.CICharField``,
  223. ``django.contrib.postgres.fields.CIEmailField``, and
  224. ``django.contrib.postgres.fields.CITextField`` are removed, except for
  225. support in historical migrations.
  226. * The ``django.contrib.postgres.fields.CIText`` mixin is removed.
  227. * The ``map_width`` and ``map_height`` attributes of ``BaseGeometryWidget`` are
  228. removed.
  229. * The ``SimpleTestCase.assertFormsetError()`` method is removed.
  230. * The ``TransactionTestCase.assertQuerysetEqual()`` method is removed.
  231. * Support for passing encoded JSON string literals to ``JSONField`` and
  232. associated lookups and expressions is removed.
  233. * Support for passing positional arguments to ``Signer`` and
  234. ``TimestampSigner`` is removed.
  235. * The ``DEFAULT_FILE_STORAGE`` and ``STATICFILES_STORAGE`` settings is removed.
  236. * The ``django.core.files.storage.get_storage_class()`` function is removed.