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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
浅谈Python peewee 使用经验
Oct 20 Python
详解用python实现简单的遗传算法
Jan 02 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Django中提示消息messages的设置方式
Nov 15 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 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二分法在IP地址查询中的应用
2008/08/12 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
详解Python中的条件判断语句
2015/05/14 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
python3.x上post发送json数据
2018/03/04 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
酒店秘书求职信范文
2014/02/17 职场文书
读书活动总结
2014/04/28 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
安全主题班会教案
2015/08/12 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python