如何检测我的 Django 对象 DateTimeField 何时达到当前时间
Posted
技术标签:
【中文标题】如何检测我的 Django 对象 DateTimeField 何时达到当前时间【英文标题】:How to detect when my Django object's DataTimeField reach current time 【发布时间】:2014-11-12 16:29:03 【问题描述】:我正在使用 Django 1.5.5。
假设我有一个这样的对象:
class Encounter(model.Models):
date = models.DateTimeField(blank=True, null=True)
如何检测给定的Encounter
何时到达当前时间?我看不出信号对我有什么帮助。
【问题讨论】:
【参考方案1】:仅使用 Django 无法检测到它。
您需要一些调度程序,它将检查每个Encounter
s 日期(例如,通过使用相应的过滤器查询),并执行所需的操作。
它可以是一个简单的 cron 脚本。你可以把它写成 djangocustom management command。例如,cron 必须每 5 分钟调用一次。
或者,您可以使用Celery。有了它,您可以从管理员那里查看工作人员状态并做一些其他事情。
【讨论】:
我认为这是不可能的。如果我没记错的话,我可以创建一个自定义管理命令,例如validatebets
(用户对遭遇进行下注,并且在遭遇遭遇时应奖励收益),然后使用 Celery 每小时运行一次此命令。我说的对吗?
不完全是。如果您选择 celery,则不需要创建管理命令,因为您只需创建一个 periodic task。如果您选择简单的 cron,管理命令将很有用。 cron 所能做的就是重复调用你的命令。在该命令中,您必须编写所有逻辑。
好吧,我最初不知道 Cron 是什么。有点匆忙,这个功能(以及其他功能)将在 24 小时内到期,我将 - 现在 - 将其编写为 Cron 脚本,因为我相信它是本地环境中最简单/最快的方式。但是,为什么我更喜欢使用 Celery(经常听说,但从未听说过使用 Cron)?是否需要任务排队系统?【参考方案2】:
您可以使用Celery。当您保存Encounter
的对象时,它将进入任务队列并仅在到达当前时间后执行。
但有一个警告,它可能会在稍后执行,具体取决于芹菜工人的忙碌程度。
【讨论】:
以上是关于如何检测我的 Django 对象 DateTimeField 何时达到当前时间的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何让 datetime 对象知道创建它的时区?