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+, 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
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 (#31853).
Fixed wrapping of long model names in the admin’s navigation sidebar (#31854).
Fixed encoding session data while upgrading multiple instances of the same project to Django 3.1 (#31864).
Adjusted admin’s navigation sidebar template to reduce debug logging when rendering (#31865).
Fixed a data loss possibility in the
select_for_update()
. When using related fields pointing to a proxy model in theof
argument, the corresponding model was not locked (#31866).Fixed a data loss possibility, following a regression in Django 2.0, when copying model instances with a cached fields value (#31863).
Fixed a regression in Django 3.1 that caused a crash when decoding an invalid session data (#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()
(#31877).Enforced thread sensitivity of the
MiddlewareMixin.process_request()
andprocess_response()
hooks when in an async context (#31905).Fixed
__in
lookup on key transforms forJSONField
with MariaDB, MySQL, Oracle, and SQLite (#31936).Fixed a regression in Django 3.1 that caused permission errors in
CommonPasswordValidator
andsettings.py
generated by thestartproject
command, when user didn’t have permissions to all intermediate directories in a Django installation path (#31912).Fixed detecting an async
get_response
callable in various builtin middlewares (#31928).Fixed a
QuerySet.order_by()
crash on PostgreSQL when ordering and grouping byJSONField
with a customdecoder
(#31956). As a consequence, fetching aJSONField
with raw SQL now returns a string instead of preloaded data. You will need to explicitly calljson.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 (#31965).Fixed a
django.contrib.admin.EmptyFieldListFilter
crash when using on reverse relations (#31952).Prevented content overflowing in the admin changelist view when the navigation sidebar is enabled (#31901).