1 de septiembre de 2020
Django 3.1.1 resuelve dos problemas de seguridad y varios errores en 3.1.
En Python 3.7+, el modo FILE_UPLOAD_DIRECTORY_PERMISSIONS no se aplicaba a los directorios de nivel intermedio creados en el proceso de subida de archivos y a los directorios de colección estática de nivel intermedio cuando se utilizaba la orden de comando de administración collectstatic.
Debes revisar y corregir manualmente los permisos en los directorios de nivel intermedio existentes.
En Python 3.7+, los directorios de nivel intermedio del caché del sistema de archivos tenían la máscara de grupo y otros del sistema estándar en lugar de 0o077 (sin permisos de grupo ni otros).
Se corrigió el envoltorio de etiquetas de acciones traducidas en la barra lateral de navegación del panel de administración para idiomas asiáticos orientales (#31853).
Se corrigió el envoltorio de nombres de modelos largos en la barra lateral de navegación del panel de administración (#31854).
Se corrigió la codificación de datos de sesión al actualizar varias instancias del mismo proyecto a Django 3.1 (#31864).
Se ajustó el template de barra lateral de navegación del panel de administración para reducir el registro de depuración al renderizar (#31865).
Se corrigió una posibilidad de pérdida de datos en el método select_for_update(). Al utilizar campos relacionados que apuntan a un modelo proxy en la argumento of, no se bloqueaba el modelo correspondiente (#31866).
Se corrigió una posibilidad de pérdida de datos, siguiendo una regresión en Django 2.0, al copiar instancias de modelos con un valor de campo cacheado (#31863).
Se corrigió una regresión en Django 3.1 que causaba un error cuando se decodificaban datos de sesión inválidos (#31895).
Se revertió la deprecación en Django 3.1 que causaba un error al pasar argumentos de palabra clave obsoletos a una consulta en TemplateView.get_context_data() (#31877).
Se hizo cumplir la sensibilidad de hilo del hook MiddlewareMixin.process_request() y process_response() cuando se encuentra en un contexto asíncrono (#31905).
Fixed __in búsqueda en transformaciones de clave para JSONField con MariaDB, MySQL, Oracle y SQLite (#31936).
Se ha corregido una regresión en Django 3.1 que causaba errores de permiso en CommonPasswordValidator y settings.py generados por el comando startproject, cuando el usuario no tenía permisos para todos los directorios intermedios en un camino de instalación de Django (#31912).
Se ha corregido la detección de una función callable get_response asíncrona en varios middlewares builtin (#31928).
Se ha corregido el crash de QuerySet.order_by() en PostgreSQL cuando se ordenaba y agrupaba por JSONField con un decodificador personalizado decoder (#31956). Como consecuencia, la recuperación de un campo JSON mediante SQL raw ahora devuelve una cadena en lugar de datos pre cargados. Deberás llamar explícitamente a json.loads() en tales casos.
Se ha corregido el crash de QuerySet.delete() en MySQL, siguiendo una regresión de rendimiento en Django 3.1 en MariaDB 10.3.2+, cuando se filtraba contra una función agregada (#31965).
Se ha corregido el crash de django.contrib.admin.EmptyFieldListFilter cuando se utilizaba en relaciones reversas (#31952).
Se ha evitado que el contenido se desbordara en la vista de cambio del administrador cuando el panel de navegación lateral está habilitado (#31901).
may 31, 2026