django model的update时auto_now不被更新的原因及解决方式


Posted in Python onApril 01, 2020

gmt_create自动添加auto_now_add;gmt_modify自动更新auto_now

class CommonInfo(models.Model):
"""基类,提供共同信息,不会创建真实的table"""

class Meta:
  # 声明自己为抽象基类
  abstract = True
  # 下面表示先根据更新时间gmt_modify降序排序,如果更新时间相同,再根据创建时间gmt_create降序排序
  ordering = ['-gmt_modify', '-gmt_create']

gmt_create = models.DateTimeField('创建时间,自动创建', auto_now_add=True, null=True, help_text='创建时间')
# 使用save可以达到自动更新的效果,使用update不会自动更新,因此需要携带上这个字段
gmt_modify = models.DateTimeField('更新时间,自动更新', auto_now=True, null=True, help_text='更新时间')

django的orm关于更新数据库的方法有update和save两种方法。

使用save时会自动更新

obj = User.objects.get(id=1)
obj.name='xxx'
obj.save()

save()时确实会自动更新当前时间

这是因为这个操作它经过了model层

使用update不会自动更新;因此需要在使用filter的update更新的时候同时赋值时间为datetime.datetime.now()

如果用django filter的update(通常为批量更新数据时)则是因为直接调用sql语句 不通过 model层

User.objects.filter(id=1).update(username='xxx')

补充知识:Django的auto_now=True没有自动更新

auto_now=True自动更新,有一个条件,就是要通过django的model层。

如create或是save方法。

如果是filter之后update方法,则直接调用的是sql,不会通过model层,

所以不会自动更新此时间。官方解释:

What you consider a bug, others may consider a feature, e.g. usingupdate_fieldsto bypass updating fields withauto_now. In fact, I wouldn't expectauto_nowfields to be updated if not present inupdate_fields.

解决办法:

强制改成save()或是update时,带上时间。

如下:

status_item = DeployStatus.objects.get(name=status_name)
  DeployImage.objects.filter(name=order_name).update(
    deploy_status=status_item,
    change_date=datetime.now())

  # 上面的操作,才会更新DeployImage表里的change_date(add_now=True)的时间,
  # 或是如下调用save()方法
  # deploy_item = DeployImage.objects.get(name=order_name)
  # deploy_item.deploy_status = status_item
  # deploy_item.save()

以上这篇django model的update时auto_now不被更新的原因及解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之通过Python连接数据库
Oct 28 Python
Django中使用group_by的方法
May 26 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
python+mysql实现个人论文管理系统
Oct 25 Python
使用python turtle画高达
Jan 19 Python
python rsa-oaep加密的示例代码
Sep 23 Python
详解MindSpore自定义模型损失函数
Jun 30 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 #Python
详解Python中pyautogui库的最全使用方法
Apr 01 #Python
django的模型类管理器——数据库操作的封装详解
Apr 01 #Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 #Python
Django数据库操作之save与update的使用
Apr 01 #Python
django model通过字典更新数据实例
Apr 01 #Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 #Python
You might like
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
php全排列递归算法代码
2012/10/09 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
JS实现拖动示例代码
2013/11/01 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
几个Linux面试题笔试题
2016/08/01 面试题
找工作最新求职信
2013/12/22 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
学校个人对照检查材料
2014/08/26 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Java 数组内置函数toArray详解
2021/06/28 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android