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 查找字符串是否存在实例详解
Jan 20 Python
Python函数式编程
Jul 20 Python
答题辅助python代码实现
Jan 16 Python
Python中logging实例讲解
Jan 17 Python
python实现批量注册网站用户的示例
Feb 22 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
深入浅析python的第三方库pandas
Feb 13 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Django REST Swagger实现指定api参数
Jul 07 Python
python 实现体质指数BMI计算
May 26 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 echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
详解Python3 基本数据类型
2019/04/19 Python
python动态进度条的实现代码
2019/07/03 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
欢送退休感言
2014/02/08 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
代办出身证明书
2014/10/21 职场文书
英语教师个人工作总结
2015/02/09 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
python随机打印成绩排名表
2021/06/23 Python
python百行代码实现汉服圈图片爬取
2021/11/23 Python
Java 定时任务技术趋势简介
2022/05/04 Java/Android