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 相关文章推荐
apache部署python程序出现503错误的解决方法
Jul 24 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
便捷提取python导入包的属性方法
Oct 15 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
python实现手机销售管理系统
Mar 19 Python
python实现文件的备份流程详解
Jun 18 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python 利用zmail库发送邮件
Sep 11 Python
python中urllib包的网络请求教程
Apr 19 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使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
vue axios用法教程详解
2017/07/23 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
医药营销专业个人自荐信
2013/09/29 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
大学生作弊检讨书
2014/02/19 职场文书
高三毕业寄语
2014/04/10 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
社区灵活就业证明
2014/11/03 职场文书
公积金贷款承诺书
2015/04/30 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
借条如何写
2015/05/26 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
Linux磁盘管理方法介绍
2022/06/01 Servers