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的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
讲解Python中的递归函数
Apr 27 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Django 连接sql server数据库的方法
Jun 30 Python
基于tensorflow加载部分层的方法
Jul 26 Python
python解析yaml文件过程详解
Aug 30 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
python中温度单位转换的实例方法
Dec 27 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php中用foreach来操作数组的代码
2011/07/17 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
asp 的 分词实现代码
2007/05/24 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
动态添加option及createElement使用示例
2014/01/26 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
销售工作岗位职责
2013/12/24 职场文书
六十大寿答谢词
2014/01/12 职场文书
土木工程求职信
2014/05/29 职场文书
生日宴会策划方案
2014/06/03 职场文书
安全教育培训制度
2015/08/06 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
小学作文之描写天气
2019/08/15 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python