1. ==========================
    
  2. Django 3.2.1 release notes
    
  3. ==========================
    
  4. 
    
  5. *May 4, 2021*
    
  6. 
    
  7. Django 3.2.1 fixes a security issue and several bugs in 3.2.
    
  8. 
    
  9. CVE-2021-31542: Potential directory-traversal via uploaded files
    
  10. ================================================================
    
  11. 
    
  12. ``MultiPartParser``, ``UploadedFile``, and ``FieldFile`` allowed
    
  13. directory-traversal via uploaded files with suitably crafted file names.
    
  14. 
    
  15. In order to mitigate this risk, stricter basename and path sanitation is now
    
  16. applied.
    
  17. 
    
  18. Bugfixes
    
  19. ========
    
  20. 
    
  21. * Corrected detection of GDAL 3.2 on Windows (:ticket:`32544`).
    
  22. 
    
  23. * Fixed a bug in Django 3.2 where subclasses of ``BigAutoField`` and
    
  24.   ``SmallAutoField`` were not allowed for the :setting:`DEFAULT_AUTO_FIELD`
    
  25.   setting (:ticket:`32620`).
    
  26. 
    
  27. * Fixed a regression in Django 3.2 that caused a crash of
    
  28.   ``QuerySet.values()/values_list()`` after ``QuerySet.union()``,
    
  29.   ``intersection()``, and ``difference()`` when it was ordered by an
    
  30.   unannotated field (:ticket:`32627`).
    
  31. 
    
  32. * Restored, following a regression in Django 3.2, displaying an exception
    
  33.   message on the technical 404 debug page (:ticket:`32637`).
    
  34. 
    
  35. * Fixed a bug in Django 3.2 where a system check would crash on a reverse
    
  36.   one-to-one relationships in ``CheckConstraint.check`` or
    
  37.   ``UniqueConstraint.condition`` (:ticket:`32635`).
    
  38. 
    
  39. * Fixed a regression in Django 3.2 that caused a crash of
    
  40.   :attr:`.ModelAdmin.search_fields` when searching against phrases with
    
  41.   unbalanced quotes (:ticket:`32649`).
    
  42. 
    
  43. * Fixed a bug in Django 3.2 where variable lookup errors were logged rendering
    
  44.   the sitemap template if alternates were not defined (:ticket:`32648`).
    
  45. 
    
  46. * Fixed a regression in Django 3.2 that caused a crash when combining ``Q()``
    
  47.   objects which contains boolean expressions (:ticket:`32548`).
    
  48. 
    
  49. * Fixed a regression in Django 3.2 that caused a crash of ``QuerySet.update()``
    
  50.   on a queryset ordered by inherited or joined fields on MySQL and MariaDB
    
  51.   (:ticket:`32645`).
    
  52. 
    
  53. * Fixed a regression in Django 3.2 that caused a crash when decoding a cookie
    
  54.   value, used by ``django.contrib.messages.storage.cookie.CookieStorage``, in
    
  55.   the pre-Django 3.2 format (:ticket:`32643`).
    
  56. 
    
  57. * Fixed a regression in Django 3.2 that stopped the shift-key modifier
    
  58.   selecting multiple rows in the admin changelist (:ticket:`32647`).
    
  59. 
    
  60. * Fixed a bug in Django 3.2 where a system check would crash on the
    
  61.   :setting:`STATICFILES_DIRS` setting with a list of 2-tuples of
    
  62.   ``(prefix, path)`` (:ticket:`32665`).
    
  63. 
    
  64. * Fixed a long standing bug involving queryset bitwise combination when used
    
  65.   with subqueries that began manifesting in Django 3.2, due to a separate fix
    
  66.   using ``Exists`` to ``exclude()`` multi-valued relationships
    
  67.   (:ticket:`32650`).
    
  68. 
    
  69. * Fixed a bug in Django 3.2 where variable lookup errors were logged when
    
  70.   rendering some admin templates (:ticket:`32681`).
    
  71. 
    
  72. * Fixed a bug in Django 3.2 where an admin changelist would crash when deleting
    
  73.   objects filtered against multi-valued relationships (:ticket:`32682`). The
    
  74.   admin changelist now uses ``Exists()`` instead of ``QuerySet.distinct()``
    
  75.   because calling ``delete()`` after ``distinct()`` is not allowed in Django
    
  76.   3.2 to address a data loss possibility.
    
  77. 
    
  78. * Fixed a regression in Django 3.2 where the calling process environment would
    
  79.   not be passed to the ``dbshell`` command on PostgreSQL (:ticket:`32687`).
    
  80. 
    
  81. * Fixed a performance regression in Django 3.2 when building complex filters
    
  82.   with subqueries (:ticket:`32632`). As a side-effect the private API to check
    
  83.   ``django.db.sql.query.Query`` equality is removed.