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

Django中设置auto_now=True的字段在哪些场景下不会被更新?

Django auto_now=True字段未触发更新的其他常见场景

auto_now=True的自动更新逻辑仅在Django ORM层执行单个模型实例的save()方法时触发,所有绕开该逻辑的操作都不会更新对应字段,除了你已经提到的QuerySet.update()、bulk_update()场景外,还有以下常见情况:

  • 调用bulk_create()做批量插入/ upsert操作时:如果使用update_conflicts参数实现存在即更新的批量操作,auto_now字段不会自动赋值,必须显式指定last_updated的更新规则才会生效。
  • 仅修改关联字段的关联关系时:调用外键关联对象的修改方法、或者多对多字段的add()、remove()、clear()、set()方法调整关联关系时,不会触发当前Contact实例的save()方法,因此last_updated不会更新。
  • 实例加载时通过only()/defer()排除了last_updated字段:此时哪怕调用实例的save()方法,Django也无法完成auto_now的自动赋值,该字段不会更新。
  • 自定义save()方法未调用父类逻辑:如果重写了Contact模型的save()方法,且没有执行super().save(*args, **kwargs),内置的auto_now赋值逻辑会被跳过,last_updated不会自动更新。
  • get_or_create()仅触发查询逻辑时:get_or_create只有在创建新对象时会自动设置auto_now字段,如果匹配到已有对象直接返回,不会触发更新操作。
  • update_or_create()无实际字段变更时:如果匹配到的现有对象字段与defaults参数的取值完全一致,Django不会执行save()操作,last_updated也不会更新。
  • 更新操作对应的数据库事务回滚时:哪怕ORM层已经完成了last_updated的赋值,只要最终事务回滚,该字段的更新也不会落库生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:06:02