# Django 5.2.8 documentation

# Django 1.9.2 版本发行说明

2016 年 2 月 1 日

Django 1.9.2 修复了 1.9 版本中的一个安全回归问题以及 1.9.1 版本中的一些错误。它还进行了一个小的不向后兼容的更改，希望不会影响任何用户。

## 安全问题：拥有“更改”但没有“添加”权限的用户可以为具有 `save_as=True` 的 `ModelAdmin` 创建对象。这个问题已得到修复。

如果一个 `ModelAdmin` 使用了 `save_as=True` （不是默认值），在编辑对象时，管理员提供了一个选项来“另存为新对象”。在 Django 1.9 中的一个回归问题阻止了对于没有“添加”权限的用户，这个表单提交不会引发“权限被拒绝”的错误。这个问题已得到修复。

## 向后不兼容的变更：在项目/应用程序模板中重新编写了 `.py-tpl` 文件。

在 Django 1.9 中将一些 Django 模板语言语法添加到默认应用程序模板中，这意味着这些文件现在具有一些无效的 Python 语法。这会对无条件地字节编译 `*.py` 文件的打包系统造成困难。

为了解决这个问题，现在在 Django 中使用 `.py-tpl` 后缀来表示项目和应用程序模板文件。`startproject` 和 `startapp` 命令会将 `.py-tpl` 后缀替换为 `.py`。例如，文件名为 `manage.py-tpl` 的模板将被创建为 `manage.py`。

如果你有一个包含 `.py-tpl` 文件的自定义项目模板，并且发现这个行为有问题，请提交一个问题报告。

## 漏洞修复

- 修复了 `ConditionalGetMiddleware` 中的回归问题，导致 `If-None-Match` 检查始终返回 HTTP 200（#26024）。

- 修复了一个导致在管理员的注销页面上显示 "user-tools" 项的回归问题（#26035）。

- 修复了在当前语言没有翻译时翻译系统崩溃的问题（#26046）。

- 修复了一个导致在时区从 GMT+0100 到 GMT+1200 时，打开管理员日历小部件时选择了错误的日期的回归问题（#24980）。

- 修复了管理界面中编辑相关模型弹出窗口的回归问题，导致在父窗口的选择下拉菜单中显示转义的值（#25997）。

- 修复了 1.8.8 中的回归问题，导致在 PostgreSQL 上的迁移中在将 `db_index=True` 或 `unique=True` 添加到已经具有另一个指定的 `CharField` 或 `TextField`，或者从已经同时具有两者之一的字段中移除一个，或者将 `unique=True` 添加到已在 `unique_together` 中列出的字段时，处理索引不正确的问题（#26034）。

- 修复了一个回归问题，当在抽象模型的字段上使用字符串模型名称定义关系时，如果在另一个应用程序中使用该模型，没有指定 app_label 的引用将不再解析到抽象模型的应用程序（#25858）。

- 修复了在 MySQL 或 PostgreSQL 上销毁现有测试数据库时崩溃的问题（#26096）。

- 修复了在 `USE_X_FORWARDED_PORT=True` 时对 POST 请求的 CSRF Cookie 检查问题（#26094）。

- 修复了当按照 `ManyToManyField` 的 `through` 模型的关联字段进行排序时，导致 `QuerySet.order_by()` 崩溃的问题（#26092）。

- 修复了在使用分布式时，当在 SQLite 上进行数据库查询参数超过 2000 个且 `DEBUG` 为 `True` 时导致异常的回归问题，这个问题发生在一些分布式中，它将 `SQLITE_MAX_VARIABLE_NUMBER` 编译时限制增加到了 2000 以上，比如 Debian（#26063）。

- 修复了在 `ModelAdmin.readonly_fields` 中使用反向的 `OneToOneField` 时导致崩溃的问题（#26060）。

- 修复了在测试用例中调用 `migrate` 命令，并且 `available_apps` 属性指向一个使用 `MIGRATION_MODULES` 设置禁用迁移的应用程序时导致崩溃的问题（#26135）。

- 恢复了测试和调试工具在模板继承或包含期间确定节点来自哪个模板的能力。在 Django 1.9 之前，调试工具可以通过 `Node.token.source[0]` 从节点中访问模板来源。这是一个未记录的私有 API。现在，每个节点都可以直接使用 `Node.origin` 属性获取源信息（#25848）。

- 修复了 Django 1.8.5 中的回归问题，导致无法使用 `copy.copy()` 复制 `SimpleLazyObject` （#26122）。

- 无论 `fields` 参数如何，GeoJSON 序列化器输出中始终包含了 `geometry_field` （#26138）。

- 修复了在使用 `USE_THOUSAND_SEPARATOR=True` 时，`contrib.gis` 地图小部件的问题（#20415）。

- 使无效的表单显示其禁用字段的初始值（#26129）。