auto_now 和 auto_now_add 之间的区别

新手上路,请多包涵

我在 Django 模型字段的属性中理解的是

  • auto_now - 每次调用 Model.save() 时将字段值更新为当前时间和日期。
  • auto_now_add - 用创建记录的时间和日期更新值。

我的问题是,如果在模型中提交的同时包含 auto_nowauto_now_add 设置为 True 怎么办?在那种情况下会发生什么?

原文由 Sukumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 680
2 个回答

auto_now 优先(显然,因为它每次都更新字段,而 auto_now_add 仅在创建时更新)。这是 DateField.pre_save 方法的代码:

 def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = datetime.date.today()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)

如您所见,如果设置了 auto_now 或同时设置了 auto_now_add 并且对象是新的,则该字段将接收当前日期。

DateTimeField.pre_save 相同:

 def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = timezone.now()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)

原文由 awesoon 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据 django 文档,在您的模型字段中同时使用 auto_nowauto_now_add 作为 True 将导致错误,因为它们是互斥的。

原文由 Oladapo Oluwaseyi Bolarinwa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题