Django 6.1 发布:模型按需取数、数据库级删除选项与更灵活的邮件配置

2026-08-06 47 预计阅读时间: 1 分钟
来源: djangoproject.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:6 分钟

Django 团队已发布 Django 6.1。这个版本主要围绕 ORM 行为控制和配置体验展开,带来了模型字段 fetch mode、数据库级 ForeignKey.on_delete 选项,以及基于字典的邮件设置。同时,Django 6.0 已结束主流支持,项目升级计划也需要同步调整。

这次版本更新了什么

Django 6.1 的几个重点可以归纳为三类:

  • 模型字段 fetch mode:允许开发者配置字段何时、如何按需获取,适合需要控制查询成本的模型访问场景。
  • 数据库级删除选项ForeignKey.on_delete 的行为可以更贴近数据库层的删除约束,减少应用层规则与数据库约束之间的不一致。
  • 字典式邮件设置:邮件配置可以用更结构化的字典表达,便于管理多个后端、连接参数或环境差异。

这些能力的共同点是:把过去分散在查询代码、模型生命周期和配置文件中的行为,进一步变成显式配置。实际升级时,不应只关注新 API 是否能运行,还要检查 SQL、级联删除和邮件发送行为是否符合现有系统预期。

从 Django 6.0 升级时要注意什么

Django 6.0 的最终小版本是 6.0.8,该版本同时包含安全修复。随着 Django 6.1 发布,6.0 进入安全维护阶段,只会持续获得安全问题和数据丢失问题修复,支持期限截至 2027 年 4 月。

可以先在独立虚拟环境中安装 Django 6.1,并运行项目现有测试:

python -m venv .venv-django61
. .venv-django61/bin/activate
python -m pip install --upgrade pip
python -m pip install "Django==6.1.*"
python manage.py check
python manage.py test

Windows PowerShell 可以使用:

py -m venv .venv-django61
.\.venv-django61\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install "Django==6.1.*"
python manage.py check
python manage.py test

升级前应锁定依赖版本,并在测试数据库中重点验证三类行为:高频列表页的查询数量、删除关联对象时的级联结果,以及 SMTP 或第三方邮件服务的连接参数。

一个可改造的模型与邮件配置示例

下面的模型示例展示了一个典型的订单与客户关系。on_delete 的具体数据库级选项应以 Django 6.1 正式文档和项目所用数据库后端为准;迁移前务必在测试库验证删除行为。

# shop/models.py
from django.db import models


class Customer(models.Model):
    email = models.EmailField(unique=True)


class Order(models.Model):
    customer = models.ForeignKey(
        Customer,
        on_delete=models.PROTECT,
        related_name="orders",
    )
    number = models.CharField(max_length=32, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

可以先生成并检查迁移,再执行迁移:

python manage.py makemigrations
python manage.py sqlmigrate shop 0001
python manage.py migrate

邮件配置可以集中放入字典,具体键名和嵌套结构请根据 Django 6.1 的正式配置接口调整。下面示例保留了常见环境变量入口,适合作为项目配置层的改造起点:

# settings.py
import os

EMAIL_CONFIG = {
    "backend": "django.core.mail.backends.smtp.EmailBackend",
    "host": os.environ["EMAIL_HOST"],
    "port": int(os.environ.get("EMAIL_PORT", "587")),
    "username": os.environ["EMAIL_USERNAME"],
    "password": os.environ["EMAIL_PASSWORD"],
    "use_tls": os.environ.get("EMAIL_USE_TLS", "true").lower() == "true",
    "from_email": os.environ.get("DEFAULT_FROM_EMAIL", "noreply@example.com"),
}

这里的关键不是把所有配置机械地塞进一个字典,而是让开发、预发布和生产环境拥有清晰的配置边界,并避免把密码写入版本库。

升级检查清单

采用 Django 6.1 时,可以按以下顺序推进:

  1. 阅读 Django 6.1 发布说明,并确认第三方包是否支持该版本。
  2. 在隔离环境安装 Django 6.1,运行 check、单元测试和集成测试。
  3. 检查新增或修改的模型字段 fetch mode,确认不会引入隐藏的额外查询或序列化问题。
  4. 对所有重要外键执行删除测试,确认应用层和数据库层的行为一致。
  5. 在测试环境验证邮件发送、超时、TLS 和凭据读取方式。
  6. 生产升级前备份数据库,并准备回滚依赖和迁移的操作步骤。

Django 6.1 更适合被当作一次有针对性的基础设施升级,而不是简单替换依赖版本。对于仍运行 Django 6.0 的项目,至少应先升级到最新的 6.0.8,并在 2027 年 4 月安全维护期结束前完成迁移规划。


相关推荐