【问题标题】:django model field update on a special eventdjango 模型字段更新特殊事件
【发布时间】:2015-01-28 01:01:13
【问题描述】:

如果我在 DateTimeField 上定义 auto_now = True,则该字段将在每次 save() 时更新。但是,当发生特殊情况时如何更新该字段?

例如:仅当同一模型的某些其他字段已更改其状态时才更新 DateTimeField。当然,我可以在数据库级别定义触发器,或者捕获 pre_save 或 post_save 信号来制作东西。但是有没有办法换一种方式呢?

【问题讨论】:

  • 我认为 pre_save 或 save 或 post_save 是此问题的最佳解决方案。如果我做到了,我将实现模型的保存方法。 (抱歉英语不好)
  • 您可以覆盖model.save 方法并将DateTime 字段更改为nowstackoverflow.com/questions/4269605/…
  • 谢谢大家。这似乎是最适合我的情况的解决方案。

标签: python django django-models django-1.6


【解决方案1】:

您可以使用 save() 方法的“update_fields”参数:

# Write your logic to check if the fields or field has changed, then:
model.save(update_fields=['field1', 'field2'])  # Do not include the DateTimeField if you don't want it updated.

【讨论】:

    【解决方案2】:

    您可以安装django-models-utils 并使用它的MonitorField。它是一个 DateTimeField 子类,用于监控模型上的另一个字段,并在监控的字段发生变化时将自身更新为当前日期时间。

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 2020-09-18
      • 2016-06-10
      • 2017-05-06
      • 2015-09-14
      • 2020-01-26
      • 2014-12-25
      • 1970-01-01
      • 2021-02-07
      相关资源
      最近更新 更多