• Language: en
  • Documentation version: development

Django 2.1 release notes - UNDER DEVELOPMENT

Welcome to Django 2.1!

These release notes cover the new features, as well as some backwards incompatible changes you’ll want to be aware of when upgrading from Django 2.0 or earlier. We’ve dropped some features that have reached the end of their deprecation cycle, and we’ve begun the deprecation process for some features.

See the Upgrading Django to a newer 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.

What’s new in Django 2.1

Minor features





Database backends


File Storage

File Uploads


Generic Views


Management Commands


  • Added support for serialization of functools.partialmethod objects.


  • 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 Replace database function replaces strings in an expression.

Requests and Responses







Backwards incompatible changes in 2.1

Database backend API


  • 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.


  • 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- 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 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. <br>. This is incompatible within XHTML, although some widgets already used aspects of HTML5 such as boolean attributes.

Features deprecated in 2.1


  • The ForceRHR GIS function is deprecated in favor of the new ForcePolygonCW function.
  • django.utils.http.cookie_date() is deprecated in favor of 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().

Features removed in 2.1

These features have reached the end of their deprecation cycle and are removed in Django 2.1. See Features deprecated in 1.11 for details, including how to remove usage of these features. in Django 2.1. See Features deprecated in 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.
Back to Top