Django 中的 auto_now 和 auto_now_add 之间的差异
需积分: 13 161 浏览量
更新于2024-09-05
收藏 3KB MD 举报
auto_now和auto_now_add的区别与用法
模型类定义中,DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()和time()三种对象。这些字段都具有auto_now和auto_now_add两个参数,它们的区别和用法是本文的重点。
auto_now参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。这使得auto_now参数在需要存储“最后修改时间”的场景下十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。
auto_now_add参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。
在admin中的日期时间字段auto_now和auto_now_add被设置为True后,这样做会导致字段成为editable=False和blank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=True表示允许在表单中不输入值。此时,如果在admin的fields或fieldset中强行加入该日期时间字段,那么程序会报错,admin无法打开;如果在admin中修改对象时,想要看到日期和时间,可以将日期时间字段添加到admin类的readonly_fields中。
在实际使用中,auto_now和auto_now_add的区别在于:auto_now用于存储“最后修改时间”,每次修改model都会自动更新;而auto_now_add用于存储“创建时间”,只在model对象第一次被创建时设置值,以后修改对象时,字段的值不会再更新。
需要注意的是,使用auto_now和auto_now_add时,需要遵循以下规则:
* auto_now和auto_now_add只能用于DateTimeField、DateField和TimeField类型的字段。
* auto_now和auto_now_add不能与default参数同时使用。
* 在admin中,auto_now和auto_now_add设置为True时,字段将变为只读状态。
auto_now和auto_now_add是两个非常有用的参数,它们可以帮助我们自动设置日期和时间字段的值,提高了开发效率。但是,需要正确地理解和使用它们,以避免出现错误。
2020-09-17 上传
2022-09-14 上传
2021-04-28 上传
点击了解资源详情
点击了解资源详情
2024-11-12 上传
2024-11-12 上传
2024-11-12 上传
绝世孤殇
- 粉丝: 0
- 资源: 2
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍