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求素数示例分享
Feb 16 Python
Linux下Python获取IP地址的代码
Nov 30 Python
Python实现二分法算法实例
Feb 02 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
Python中请不要再用re.compile了
Jun 30 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Python 中的Sympy详细使用
Aug 07 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JS实现吸顶特效
2020/01/08 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python自动zip压缩目录的方法
2015/06/28 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
wxPython实现带颜色的进度条
2019/11/19 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
如何给Python代码进行加密
2020/01/10 Python
使用npy转image图像并保存的实例
2020/07/01 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
新学期开学演讲稿
2014/05/24 职场文书
计算机求职信
2014/07/02 职场文书
社区娱乐活动方案
2014/08/21 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
北京英语导游词
2015/02/12 职场文书
2015年教师教学工作总结
2015/04/28 职场文书