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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
使用rpclib进行Python网络编程时的注释问题
May 06 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
python实现自动发送报警监控邮件
Jun 21 Python
Python之用户输入的实例
Jun 22 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
opencv+python实现均值滤波
Feb 19 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
学习Python需要哪些工具
Sep 04 Python
Django web自定义通用权限控制实现方法
Nov 24 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
与数据库连接
2006/10/09 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
移动节点的jquery代码
2014/01/13 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python使用getpass库读取密码的示例
2017/10/10 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
python3中编码获取网页的实例方法
2020/11/16 Python
python实现简单的学生管理系统
2021/02/22 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
模具专业求职信
2014/06/26 职场文书
大二学年个人总结
2015/03/03 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers