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脚本实现下载合并SAE日志
Feb 10 Python
python2.7安装图文教程
Mar 13 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
浅谈django的render函数的参数问题
Oct 16 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
如何用 Python 制作一个迷宫游戏
Feb 25 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
新版PHP极大的增强功能和性能
2006/10/09 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
php适配器模式简单应用示例
2019/10/23 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
python中os模块详解
2016/10/14 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Python向excel中写入数据的方法
2019/05/05 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
信用卡工资证明范本
2014/10/17 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
学校节水倡议书
2015/04/29 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python