You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django更新记录时date_updated字段无法自动更新问题求助

解决Django中update()方法不更新date_updated字段的问题

你的问题核心在于:Django的QuerySet.update()方法是直接生成数据库UPDATE语句执行,不会触发模型的save()方法,也不会触发auto_now=True的自动更新逻辑。不管你在基类还是子类重写save(),只要用update()就不会走这些代码。

给你几个可行的解决办法:

方法一:手动在update()中指定date_updated

直接在更新时把date_updated字段加进去,简单高效:

from django.utils import timezone

# 示例更新代码
data_to_update = {"field1": "new_value", "field2": 123}
OtherClass.objects.filter(id=target_id).update(**data_to_update, date_updated=timezone.now())

方法二:改用实例save()方式更新

先获取模型实例,修改属性后调用save(),这样会触发基类的save()逻辑(或者auto_now=True的自动更新):

obj = OtherClass.objects.get(id=target_id)
# 批量赋值属性
for attr, value in data_to_update.items():
    setattr(obj, attr, value)
obj.save()

注意:这种方式会先执行一次SELECT查询,再执行UPDATE,性能比直接update()稍差,但能触发模型的所有生命周期方法(比如信号、自定义save逻辑)。

额外优化:移除冗余代码

你当前的Base类中,date_updated = models.DateTimeField(auto_now=True)和save()里的手动赋值是重复的,二者留一个就行:

  • 如果保留auto_now=True,可以删掉save()方法里的self.date_updated = django.timezone.now();
  • 如果想手动控制,就把auto_now=True改成auto_now_add=False(或者直接去掉),保留save()里的赋值逻辑。

内容的提问来源于stack exchange,提问作者Alonso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:15:38