• Language: en
  • Documentation version: development

Django 3.2 release notes - UNDER DEVELOPMENT

Expected April 2021

Welcome to Django 3.2!

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 3.1 or earlier. 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.

Django 3.2 is designated as a long-term support release. It will receive security updates for at least three years after its release. Support for the previous LTS, Django 2.2, will end in April 2022.

Python compatibility

Django 3.2 supports Python 3.6, 3.7, and 3.8. We highly recommend and only officially support the latest release of each series.

What’s new in Django 3.2

Minor features

django.contrib.auth

  • The default iteration count for the PBKDF2 password hasher is increased from 216,000 to 260,000.

django.contrib.messages

  • The CreateExtension operation now checks that the extension already exists in the database and skips the migration if so.

Cache

CSRF

Email

Error Reporting

File Storage

File Uploads

Forms

Generic Views

Internationalization

Logging

Management Commands

  • loaddata now supports fixtures stored in XZ archives (.xz) and LZMA archives (.lzma).
  • makemigrations can now be called without an active database connection. In that case, check for a consistent migration history is skipped.
  • BaseCommand.requires_system_checks now supports specifying a list of tags. System checks registered in the chosen tags will be checked for errors prior to executing the command. In previous versions, either all or none of the system checks were performed.

Migrations

  • The new Operation.migration_name_fragment property allows providing a filename fragment that will be used to name a migration containing only that operation.

Models

  • The new no_key parameter for QuerySet.select_for_update(), supported on PostgreSQL, allows acquiring weaker locks that don’t block the creation of rows that reference locked rows through a foreign key.
  • When() expression now allows using the condition argument with lookups.

Requests and Responses

Security

Serialization

Signals

Templates

Tests

  • Objects assigned to class attributes in TestCase.setUpTestData() are now isolated for each test method. Such objects are now required to support creating deep copies with copy.deepcopy(). Assigning objects which don’t support deepcopy() is deprecated and will be removed in Django 4.1.
  • Client now preserves the request query string when following 307 and 308 redirects.

URLs

Utilities

Validators

Backwards incompatible changes in 3.2

Database backend API

This section describes changes that may be needed in third-party database backends.

django.contrib.gis

  • Support for PostGIS 2.2 is removed.

Dropped support for PostgreSQL 9.5

Upstream support for PostgreSQL 9.5 ends in February 2021. Django 3.2 supports PostgreSQL 9.6 and higher.

Dropped support for MySQL 5.6

The end of upstream support for MySQL 5.6 is April 2021. Django 3.2 supports MySQL 5.7 and higher.

Miscellaneous

  • The undocumented SpatiaLiteOperations.proj4_version() method is renamed to proj_version().
  • Minified JavaScript files are no longer included with the admin. If you require these files to be minified, consider using a third party app or external build tool. The minified vendored JavaScript files packaged with the admin (e.g. jquery.min.js) are still included.
  • ModelAdmin.prepopulated_fields no longer strips English stop words, such as 'a' or 'an'.
  • slugify() now removes leading and trailing dashes and underscores.
  • The intcomma and intword template filters no longer depend on the USE_L10N setting.

Features deprecated in 3.2

Miscellaneous

Back to Top