September 1, 2020
Django 3.1.1 fixes two security issues and several bugs in 3.1.
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.
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).
select_for_update()
. When using
related fields pointing to a proxy model in the of
argument, the
corresponding model was not locked (#31866).TemplateView.get_context_data()
(#31877).MiddlewareMixin.process_request()
and process_response()
hooks
when in an async context (#31905).__in
lookup on key transforms for
JSONField
with MariaDB, MySQL, Oracle, and SQLite
(#31936).CommonPasswordValidator
and settings.py
generated by the
startproject
command, when user didn’t have permissions to all
intermediate directories in a Django installation path (#31912).get_response
callable in various builtin
middlewares (#31928).QuerySet.order_by()
crash on PostgreSQL when ordering and
grouping by JSONField
with a custom
decoder
(#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.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).django.contrib.admin.EmptyFieldListFilter
crash when using on
reverse relations (#31952).May 26, 2021