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的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
python实现自动重启本程序的方法
Jul 09 Python
python模块smtplib学习
May 22 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
python实现弹跳小球
May 13 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Django实现基于类的分页功能
Oct 31 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
python绘图模块之利用turtle画图
Feb 12 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
如何判断php数组的维度
2013/06/10 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
PHP多文件上传类实例
2015/03/07 PHP
php二维码生成
2015/10/19 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python标准库之collections包的使用教程
2017/04/27 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
思想汇报范文
2013/11/04 职场文书
授权委托书
2014/07/31 职场文书
法律意见书范本
2015/06/04 职场文书
法院执行局工作总结
2015/08/11 职场文书
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL