【问题标题】:Django update model fields after a certain timeDjango 在一段时间后更新模型字段
【发布时间】:2021-02-07 02:57:42
【问题描述】:
我有一个分配模型,它现在具有以下属性:标题(字符字段)、截止日期(日期和时间字段)、关闭(布尔字段)。封闭字段表示作业是否已超过截止日期。关闭字段默认为 false。
所以现在,我想要的是,当创建模型的对象时,应根据截止日期自动更新封闭字段。说截止日期是2小时后。然后封闭场应在 2 小时后变为真。做这个的最好方式是什么? Django 是否提供这种类型的任何字段?哪个会在一段时间后自行更新?
【问题讨论】:
标签:
python
django
django-models
【解决方案1】:
Django 不支持任何此类字段。
所以,这里有一些你有的选择
- 创建一个 management command 并使用 cron 作业定期运行它
- 同样可以用芹菜做periodic tasks
- 这可能不适用于任何情况,但可以在合适的情况下使用,
您可以在访问时更新状态,因此在返回状态之前检查其是否为真,如果为真则检查其是否已过期,如果已过期,请设置为 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