Django中执行update更新时auto_now问题

一、问题说明

在我们给模型的时间字段updated_at字段添加auto_now=True之后,原则上来说在更新数据是会自动修改更新时间。

但是当我们使用在代码中使用ORM中的filter(xxx=xxx).update(xxx=xxx)时发现,更新时间字段并没有完成更新。

而如果使用obj.save()或通过ModelViewSets接口发起更新操作时,updated_at字段是可以更新的。

二、具体原因

出现上述问题的原因在于,obj.save()操作直接走了DjangoModel层、触发了auto_now机制,而走前端接口访问时也同样经过了模型的序列化操作,

而对于上面的filter(xxx=xxx).update(xxx=xxx),通过打印SQL我们可以看出,这类update操作是单纯被转换为了SET SQL,并没有经过Model层,自然也就没有对updated_at字段更新了。

三、解决方法

解决方法很简单,只需要在进行update操作时,在更新字段中加上:

python3 复制代码
ModelName.objects.filter(
	xxx=xxx,
).update(
	xxx=xxx.
	updated_at=datetime.dattime.now()
)
相关推荐
Cchaofan3 分钟前
lesson01-PyTorch初见(理论+代码实战)
人工智能·pytorch·python
网络小白不怕黑3 分钟前
Python Socket编程:实现简单的客户端-服务器通信
服务器·网络·python
免檒27 分钟前
go语言协程调度器 GPM 模型
开发语言·后端·golang
Ronin-Lotus27 分钟前
程序代码篇---python获取http界面上按钮或者数据输入
python·http
不知道写什么的作者1 小时前
Flask快速入门和问答项目源码
后端·python·flask
caihuayuan51 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
一只码代码的章鱼2 小时前
Spring Boot- 2 (数万字入门教程 ):数据交互篇
spring boot·后端·交互
孙胜完不了2 小时前
Day29
python
lkx097882 小时前
第四天的尝试
python
lcccyyy12 小时前
day 29
python