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实现通过代理服务器访问远程url的方法
Apr 29 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
Python脚本完成post接口测试的实例
Dec 17 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
django admin组件使用方法详解
Jul 19 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
python脚本框架webpy模板控制结构
Nov 20 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中curl使用指南
2015/02/05 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
js style动态设置table高度
2014/10/21 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
python在不同层级目录import模块的方法
2016/01/31 Python
Python中字符串的格式化方法小结
2016/05/03 Python
Python装饰器原理与用法分析
2018/04/30 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python的列表List求均值和中位数实例
2020/03/03 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
技校毕业生自荐信范文
2014/03/07 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
社区党支部承诺书
2015/04/29 职场文书
编写python程序的90条建议
2021/04/14 Python
MySQL如何使备份得数据保持一致
2022/05/02 MySQL
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers