编程 Django 6.1 发布解读:模型字段 fetch 模式、数据库级外键删除与 MAILERS 多邮件后端

2026-09-09 08:32:43

Django 6.1 发布解读:模型字段 fetch 模式、数据库级外键删除与 MAILERS 多邮件后端

Django 于 2026 年 8 月 5 日发布 6.1。这一版本聚焦 ORM 查询效率与邮件配置现代化:新增模型字段 fetch 模式、数据库级外键删除选项,并引入支持多后端的 MAILERS 邮件配置体系。主流支持预计持续到 2027 年 4 月,扩展支持到 2027 年 12 月。

核心新能力

模型字段 fetch 模式:未加载字段在被访问时的取数行为现在可配置,QuerySet.fetch_mode() 提供三种模式:

  • FETCH_ONE(默认):只补取当前实例缺失的字段,即 Django 原有行为;
  • FETCH_PEERS:为来自同一 QuerySet 的所有实例补取缺失字段,效果类似按需的 prefetch_related()——大部分「N+1 查询问题」可被压到两次查询,且无需维护要预取的字段清单;
  • FETCH_RAISE:抛出 FieldFetchBlocked 异常,可在性能敏感代码段中阻止意外查询。

数据库级外键删除选项ForeignKey.on_delete 新增 DB_CASCADEDB_SET_NULLDB_SET_DEFAULT 三个选项,删除逻辑完全由数据库 SQL ON DELETE 子句完成,Django 无需先加载对象再删,效率更高;代价是 DB_CASCADE 不触发 pre_delete/post_delete 信号。

MAILERS 多邮件后端:新的 MAILERS 设置像 DATABASES/CACHES 一样支持配置多个邮件后端及各自选项,发送时用 using 参数选择 mailer。Django 7.0 将用它取代 EMAIL_BACKEND 及一系列 EMAIL_* 设置;旧设置在 6.1 中继续工作但开始产生弃用警告,可随时迁移。

其他值得注意的变化

  • 管理后台:登录页对已认证用户跳转到 next URL;list_select_related=False 时仅预取 list_display 指定的外键字段以提升性能;change form 可访问性布局调整(字段标签、帮助文本、校验错误分层显示)。
  • 认证:PBKDF2 密码哈希默认迭代次数从 1,200,000 提升到 1,500,000;迁移重命名模型时会同步重命名权限名。
  • 安全:新增 csp_nonce_attr 模板标签与 security.W027 检查,CSP nonce 自动注入内置模板与 admin 模板。
  • GISisempty/num_dimensions 查询支持(PostGIS/SpatiaLite),OpenLayers widget 升级到 10.9.0。
  • 通用视图RedirectView.preserve_request 可用 307/308 保留 HTTP 方法与请求体。

升级注意(不兼容变更)

  • 停止支持 PostgreSQL 14、MySQL < 8.4、MariaDB < 10.11、SQLite < 3.37,PostGIS < 3.1、GEOS < 3.10、GDAL < 3.3;
  • 依赖 vary 的缓存键生成方式变化,升级后首次访问缓存页会 miss;
  • union()/difference()/intersection() 结合默认排序时若字段未被 values() 选中会抛 DatabaseError
  • 邮件相关 API(get_connection()connection 参数)进入弃用流程。

来源:Django 6.1 release notes

复制全文 生成海报 Django Python Web框架 ORM

推荐文章

程序员茄子在线接单