【问题标题】:Django update model fields after a certain timeDjango 在一段时间后更新模型字段
【发布时间】:2021-02-07 02:57:42
【问题描述】:

我有一个分配模型,它现在具有以下属性:标题(字符字段)、截止日期(日期和时间字段)、关闭(布尔字段)。封闭字段表示作业是否已超过截止日期。关闭字段默认为 false。 所以现在,我想要的是,当创建模型的对象时,应根据截止日期自动更新封闭字段。说截止日期是2小时后。然后封闭场应在 2 小时后变为真。做这个的最好方式是什么? Django 是否提供这种类型的任何字段?哪个会在一段时间后自行更新?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    Django 不支持任何此类字段。 所以,这里有一些你有的选择

    1. 创建一个 management command 并使用 cron 作业定期运行它
    2. 同样可以用芹菜做periodic tasks
    3. 这可能不适用于任何情况,但可以在合适的情况下使用, 您可以在访问时更新状态,因此在返回状态之前检查其是否为真,如果为真则检查其是否已过期,如果已过期,请设置为 False 并返回

    【讨论】:

      【解决方案2】:

      不要关闭一个字段。将其设为计算属性 - 然后一切都会自动运行:

      from django.utils import timezone
      from datetime import timedelta
      
      def two_hours_from_now():
          return timezone.now() + timedelta(seconds=2*3600)
      
      class Assignment(models.Model):
          deadline = models.DateTimeField(default=two_hours_from_now)
          ... # other fields, no closed field
      
          @property
          def closed(self) -> bool:
              return timezone.now() < self.deadline
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-25
        • 2020-01-26
        • 2021-11-19
        • 2015-09-14
        • 2020-08-08
        • 2019-04-06
        • 1970-01-01
        相关资源
        最近更新 更多