# Django 5.2.8 documentation

# Django 3.2.1 版本发行说明

2021 年 5 月 4 日

Django 3.2.1 修复了 3.2 中的一个安全问题和几个漏洞。

## CVE-2021-31542：通过上传的文件进行潜在的目录遍历

`MultiPartParser`、`UploadedFile` 和 `FieldFile` 允许通过上传的文件和适当制作的文件名进行目录遍历。

为了降低这种风险，现在应用了更严格的基名和路径预防。

## 漏洞修复

- 纠正了在 Windows 上对 GDAL 3.2 的检测（#32544）。

- 修正了 Django 3.2 中的一个漏洞，`DEFAULT_AUTO_FIELD` 配置无法使用 `BigAutoField` 和 `SmallAutoField` 的子类（#32620）。

- 修正了 Django 3.2 中的一个缺陷，当在 `QuerySet.union()`、`intersection()` 和 `difference()` 之后使用一个无注解字段进行排序的 `QuerySet.values()/values_list()` 会发生崩溃（#32627）。

- 恢复了，在 Django 3.2 中的缺陷，在技术 404 调试页面显示异常消息（#32637）。

- 修正了 Django 3.2 中的一个漏洞，即在 `CheckConstraint.check` 或 `UniqueConstraint.condition` 中反向查询一对一关系时，系统检查会崩溃（#32635）。

- 修正了 Django 3.2 中的一个缺陷，当搜索时带不平衡引号的短语时，会导致 `ModelAdmin.search_fields` 崩溃（#32649）。

- 修正了 Django 3.2 中的一个漏洞，即如果没有定义候补变量，变量查找错误会被记录在站点地图模板上（#32648）。

- 修正了 Django 3.2 中的一个缺陷，当组合包含布尔表达式（#32548）的 `Q()` 对象时导致崩溃的问题。

- 修正了 Django 3.2 中的一个缺陷，该缺陷导致 `QuerySet.update()` 在 MySQL 和 MariaDB 按继承或连接字段排序的查询集上崩溃（#32645）。

- 修正了 Django 3.2 中的一个缺陷，当解码由 `django.contrib.messages.storage.CookieStorage` 使用的 Django 3.2 之前格式的 cookie 值时，导致崩溃（#32643）。

- 修正了 Django 3.2 中的一个缺陷，该缺陷使 shift 键修改器无法在管理更新列表中选择多行（#32647）。

- 修正了 Django 3.2 中的一个bug，即系统检查会在 `STATICFILES_DIRS` 配置中出现 `(prefix, path)` 的二元元组列表时崩溃（#32665）。

- 修正了一个长期存在的漏洞，涉及到与子查询一起使用时的查询集按位组合，该漏洞在 Django 3.2 中开始出现，是由于一个使用 `Exists` 来 `exclude()` 多值关系的单独修正（#32650）。

- 修正了 Django 3.2 中的一个漏洞，即在渲染某些管理模板时记录了变量查询错误（#32681）。

- 在 Django 3.2 中修复了一个 bug，该 bug 导致在删除针对多值关系进行过滤的对象时，管理员 changelist 会崩溃 (#32682)。管理员 changelist 现在使用 `Exists()` 而不是 `QuerySet.distinct()`，因为在 Django 3.2 中不允许在 `distinct()` 后调用 `delete()`，以解决数据丢失的可能性。

- 修正了 Django 3.2 中的一个缺陷，即在 PostgreSQL 上调用进程环境不会被传递给 `dbshell` 命令（#32687）。

- 修正了 Django 3.2 中使用子查询构建复杂过滤器时的性能缺陷（#32632）。作为一个副作用，删除了检查 `django.db.sql.query.Query` 相等的私有 API。