Django 3.1.1 release notes — Django documentation

From Get docs
Django/docs/3.2.x/releases/3.1.1

Django 3.1.1 release notes

September 1, 2020

Django 3.1.1 fixes two security issues and several bugs in 3.1.

CVE-2020-24583: Incorrect permissions on intermediate-level directories on Python 3.7+

On Python 3.7+, :setting:`FILE_UPLOAD_DIRECTORY_PERMISSIONS` mode was not applied to intermediate-level directories created in the process of uploading files and to intermediate-level collected static directories when using the :djadmin:`collectstatic` management command.

You should review and manually fix permissions on existing intermediate-level directories.


CVE-2020-24584: Permission escalation in intermediate-level directories of the file system cache on Python 3.7+

On Python 3.7+, the intermediate-level directories of the file system cache had the system’s standard umask rather than 0o077 (no group or others permissions).


Bugfixes

  • Fixed wrapping of translated action labels in the admin’s navigation sidebar for East Asian languages (:ticket:`31853`).
  • Fixed wrapping of long model names in the admin’s navigation sidebar (:ticket:`31854`).
  • Fixed encoding session data while upgrading multiple instances of the same project to Django 3.1 (:ticket:`31864`).
  • Adjusted admin’s navigation sidebar template to reduce debug logging when rendering (:ticket:`31865`).
  • Fixed a data loss possibility in the select_for_update(). When using related fields pointing to a proxy model in the of argument, the corresponding model was not locked (:ticket:`31866`).
  • Fixed a data loss possibility, following a regression in Django 2.0, when copying model instances with a cached fields value (:ticket:`31863`).
  • Fixed a regression in Django 3.1 that caused a crash when decoding an invalid session data (:ticket:`31895`).
  • Reverted a deprecation in Django 3.1 that caused a crash when passing deprecated keyword arguments to a queryset in TemplateView.get_context_data() (:ticket:`31877`).
  • Enforced thread sensitivity of the MiddlewareMixin.process_request() and process_response() hooks when in an async context (:ticket:`31905`).
  • Fixed __in lookup on key transforms for JSONField with MariaDB, MySQL, Oracle, and SQLite (:ticket:`31936`).
  • Fixed a regression in Django 3.1 that caused permission errors in CommonPasswordValidator and settings.py generated by the :djadmin:`startproject` command, when user didn’t have permissions to all intermediate directories in a Django installation path (:ticket:`31912`).
  • Fixed detecting an async get_response callable in various builtin middlewares (:ticket:`31928`).
  • Fixed a QuerySet.order_by() crash on PostgreSQL when ordering and grouping by JSONField with a custom decoder (:ticket:`31956`). As a consequence, fetching a JSONField with raw SQL now returns a string instead of pre-loaded data. You will need to explicitly call json.loads() in such cases.
  • Fixed a QuerySet.delete() crash on MySQL, following a performance regression in Django 3.1 on MariaDB 10.3.2+, when filtering against an aggregate function (:ticket:`31965`).
  • Fixed a django.contrib.admin.EmptyFieldListFilter crash when using on reverse relations (:ticket:`31952`).
  • Prevented content overflowing in the admin changelist view when the navigation sidebar is enabled (:ticket:`31901`).