Django在一定时间后更新模型字段

时间:2020-10-24 05:16:49

标签: python django django-models

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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