5.1.txt 8.5 KB

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