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_CASCADE、DB_SET_NULL、DB_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 模板。 - GIS:
isempty/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参数)进入弃用流程。