这是一篇关于 Django 5.0 中新增的GeneratedField
(生成字段)的介绍文章,主要内容如下:
- 引入:作者长期认为数据库生成列对 Django 来说是一个杀手级功能,在 Django 5.0 中终于实现,本文分享使用 SQLite 作为数据库后端测试
GeneratedField
的工作。 GeneratedField
特性:是全功能字段,可用于查询、显示和索引,值由数据库根据其他字段自动计算,不可设置或修改,定义需指定expression
(计算表达式)、output_field
(输出字段类型)和db_persist
(是否持久化存储)属性。- 设置环境:需要 Python 3(测试版本 3.11 - 3.12)、虚拟环境和 Django 5.0(测试版本 5.0)。
generatedfields
项目和samples
应用:创建generatedfields
项目和samples
应用,激活samples
应用并在settings.py
中配置。- 示例模型及命令:展示了多种使用
GeneratedField
的示例模型,如计算矩形面积、正方形面积、圆面积、直角三角形面积、商品总价、订单状态、事件日期和持续时间、JSON 键值和拼接字段等,还介绍了一些常用命令(makemigrations
、sqlmigrate
、migrate
、shell
)。 - 参与和资源:鼓励读者参与 Django 开发,报告问题,提供了 GitHub 仓库(github.com/pauloxnet/generatedfields)、Django 文档(GeneratedField - Django documentation)和 SQLite 文档(Generated Columns - SQLite documentation)等资源。
- 总结和免责声明:生成字段是强大的工具,可带回数据库逻辑,简化不同应用在同一数据库上的协作,未来将展示更多示例,代码仅用于演示,风险自负。
各部分详细内容:
TL;DR
(重点摘要):GeneratedField
是 Django 5.0 的新特性,值由数据库计算,可用于所有支持的后端数据库,示例模型如计算矩形面积的Rectangle
模型。Introduction
(介绍):阐述对数据库生成列的思考和贡献,以及本文的目的是分享使用GeneratedField
的实验。GeneratedField
(生成字段):详细介绍GeneratedField
的属性、迁移时生成的 SQL 代码等。Set Up
(设置):说明实验所需的 Python 版本、虚拟环境和 Django 版本及安装方法。The generatedfields project
(generatedfields
项目):创建generatedfields
项目并展示其基本文件结构。The samples app
(samples
应用):创建samples
应用并展示其文件结构。Activating the samples app
(激活samples
应用):在settings.py
中激活samples
应用。Sample models
(示例模型):展示多种使用GeneratedField
的示例模型,包括不同几何形状和商品相关的模型。Useful commands
(有用的命令):介绍常用的 Django 管理命令,如生成迁移、查看迁移 SQL 等。A calculated product field
(计算乘积字段):以矩形模型为例,展示计算两个字段乘积的生成字段。A calculated exponentiation field
(计算幂次方字段):通过正方形模型展示使用数据库函数计算幂次方的生成字段。A calculated geometric formula field
(计算几何公式字段):以圆形模型为例,展示使用数据库函数计算几何公式的生成字段。A calculated trigonometric functions field
(计算三角函数字段):以直角三角形模型为例,展示使用三角函数的生成字段。A calculated total price field
(计算总价字段):在商品模型中展示计算总价的生成字段,包括默认值设置。A calculated status field
(计算状态字段):在订单模型中展示使用条件表达式的生成字段。Calculated date and duration fields
(计算日期和持续时间字段):在事件模型中展示计算日期和持续时间的生成字段。A calculated JSON key field
(计算 JSON 键字段):在包模型中展示从 JSON 数据中提取键值的生成字段。A calculated concatenated field
(计算拼接字段):在用户模型中展示拼接两个字段的生成字段,并提及使用时的注意事项。Get involved
(参与):邀请读者参与 Django 开发,报告问题。GitHub
(GitHub):提供实验代码的 GitHub 仓库地址。Conclusion
(结论):总结生成字段的强大功能和带来的好处,以及后续将展示的内容。Disclaimer
(免责声明):强调代码仅用于演示,不保证可用于生产环境,使用风险自负。Resources
(资源):提供 Django 文档和 SQLite 文档的链接。Updates
(更新):记录文章的更新历史,包括改进文本、添加内容等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。