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中的身份运算符的使用方法
Oct 13 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
Python3处理HTTP请求的实例
May 10 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
python实现黑客字幕雨效果
Jun 21 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Django csrf 验证问题的实现
Oct 09 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
python根据字典的键来删除元素的方法
Aug 16 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 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
短波收音机简介
2021/03/01 无线电
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
质量安全标语
2014/06/07 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
python语言中pandas字符串分割str.split()函数
2022/08/05 Python