============================================ Django 2.1 release notes - UNDER DEVELOPMENT ============================================ Welcome to Django 2.1! These release notes cover the :ref:`new features `, as well as some :ref:`backwards incompatible changes ` you'll want to be aware of when upgrading from Django 2.0 or earlier. We've :ref:`dropped some features` that have reached the end of their deprecation cycle, and we've :ref:`begun the deprecation process for some features `. See the :doc:`/howto/upgrade-version` guide if you're updating an existing project. Python compatibility ==================== Django 2.1 supports Python 3.5, 3.6, and 3.7. Django 2.0 is the last version to support Python 3.4. We **highly recommend** and only officially support the latest release of each series. .. _whats-new-2.1: What's new in Django 2.1 ======================== Minor features -------------- :mod:`django.contrib.admin` ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * :attr:`.ModelAdmin.search_fields` now accepts any lookup such as ``field__exact``. * jQuery is upgraded from version 2.2.3 to 3.2.1. * The new :meth:`.ModelAdmin.delete_queryset` method allows customizing the deletion process of the "delete selected objects" action. :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... :mod:`django.contrib.auth` ~~~~~~~~~~~~~~~~~~~~~~~~~~ * :djadmin:`createsuperuser` now gives a prompt to allow bypassing the :setting:`AUTH_PASSWORD_VALIDATORS` checks. * :class:`~django.contrib.auth.forms.UserCreationForm` and :class:`~django.contrib.auth.forms.UserChangeForm` no longer need to be rewritten for a custom user model. :mod:`django.contrib.contenttypes` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... :mod:`django.contrib.gis` ~~~~~~~~~~~~~~~~~~~~~~~~~ * ... :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... :mod:`django.contrib.postgres` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... :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 ~~~~~ * The :ref:`local-memory cache backend ` now uses a least-recently-used (LRU) culling strategy rather than a pseudo-random one. CSRF ~~~~ * ... Database backends ~~~~~~~~~~~~~~~~~ * ... Email ~~~~~ * ... File Storage ~~~~~~~~~~~~ * ... File Uploads ~~~~~~~~~~~~ * ... Forms ~~~~~ * ... Generic Views ~~~~~~~~~~~~~ * ... Internationalization ~~~~~~~~~~~~~~~~~~~~ * ... Management Commands ~~~~~~~~~~~~~~~~~~~ * ... Migrations ~~~~~~~~~~ * Added support for serialization of ``functools.partialmethod`` objects. Models ~~~~~~ * Models can now use ``__init_subclass__()`` from :pep:`487`. * A ``BinaryField`` may now be set to ``editable=True`` if you wish to include it in model forms. * The new :class:`~django.db.models.functions.Replace` database function replaces strings in an expression. Requests and Responses ~~~~~~~~~~~~~~~~~~~~~~ * Added :meth:`.HttpRequest.get_full_path_info`. Serialization ~~~~~~~~~~~~~ * ... Signals ~~~~~~~ * ... Templates ~~~~~~~~~ * ... Tests ~~~~~ * ... URLs ~~~~ * ... Validators ~~~~~~~~~~ * ... .. _backwards-incompatible-2.1: Backwards incompatible changes in 2.1 ===================================== Database backend API -------------------- * To adhere to :pep:`249`, exceptions where a database doesn't support a feature are changed from :exc:`NotImplementedError` to :exc:`django.db.NotSupportedError`. :mod:`django.contrib.gis` ------------------------- * Support for SpatiaLite 4.0 is removed. Dropped support for MySQL 5.5 ----------------------------- The end of upstream support for MySQL 5.5 is December 2018. Django 2.1 supports MySQL 5.6 and higher. Dropped support for PostgreSQL 9.3 ---------------------------------- The end of upstream support for PostgreSQL 9.3 is September 2018. Django 2.1 supports PostgreSQL 9.4 and higher. Miscellaneous ------------- * The minimum supported version of ``mysqlclient`` is increased from 1.3.3 to 1.3.7. * The date format of ``Set-Cookie``'s ``Expires`` directive is changed to follow :rfc:`7231#section-7.1.1.1` instead of Netscape's cookie standard. Hyphens present in dates like ``Tue, 25-Dec-2018 22:26:13 GMT`` are removed. This change should be merely cosmetic except perhaps for antiquated browsers that don't parse the new format. * ``allowed_hosts`` is now a required argument of private API ``django.utils.http.is_safe_url()``. * The ``multiple`` attribute rendered by the :class:`~django.forms.SelectMultiple` widget now uses HTML5 boolean syntax rather than XHTML's ``multiple="multiple"``. * HTML rendered by form widgets no longer includes a closing slash on void elements, e.g. ``
``. This is incompatible within XHTML, although some widgets already used aspects of HTML5 such as boolean attributes. .. _deprecated-features-2.1: Features deprecated in 2.1 ========================== Miscellaneous ------------- * The ``ForceRHR`` GIS function is deprecated in favor of the new :class:`~django.contrib.gis.db.models.functions.ForcePolygonCW` function. * ``django.utils.http.cookie_date()`` is deprecated in favor of :func:`~django.utils.http.http_date`, which follows the format of the latest RFC. * ``{% load staticfiles %}`` and ``{% load admin_static %}`` are deprecated in favor of ``{% load static %}``, which works the same. * ``django.contrib.staticfiles.templatetags.static()`` is deprecated in favor of ``django.templatetags.static.static()``. .. _removed-features-2.1: Features removed in 2.1 ======================= These features have reached the end of their deprecation cycle and are removed in Django 2.1. See :ref:`deprecated-features-1.11` for details, including how to remove usage of these features. in Django 2.1. See :ref:`deprecated-features-1.11` and for details, including how to remove usage of these features. * ``contrib.auth.views.login()``, ``logout()``, ``password_change()``, ``password_change_done()``, ``password_reset()``, ``password_reset_done()``, ``password_reset_confirm()``, and ``password_reset_complete()`` are removed. * The ``extra_context`` parameter of ``contrib.auth.views.logout_then_login()`` is removed. * ``django.test.runner.setup_databases()`` is removed. * ``django.utils.translation.string_concat()`` is removed. * ``django.core.cache.backends.memcached.PyLibMCCache`` no longer supports passing ``pylibmc`` behavior settings as top-level attributes of ``OPTIONS``. * The ``host`` parameter of ``django.utils.http.is_safe_url()`` is removed. * Silencing of exceptions raised while rendering the ``{% include %}`` template tag is removed. * ``DatabaseIntrospection.get_indexes()`` is removed. * The ``authenticate()`` method of authentication backends requires ``request`` as the first positional argument. * The ``django.db.models.permalink()`` decorator is removed. * The ``USE_ETAGS`` setting is removed. ``CommonMiddleware`` and ``django.utils.cache.patch_response_headers()`` no longer set ETags. * The ``Model._meta.has_auto_field`` attribute is removed. * Support for regular expression groups with ``iLmsu#`` in ``url()`` is removed. * Support for ``Widget.render()`` methods without the ``renderer`` argument is removed.