如何检测我的 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 无法检测到它。

您需要一些调度程序,它将检查每个Encounters 日期(例如,通过使用相应的过滤器查询),并执行所需的操作。

它可以是一个简单的 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 对象知道创建它的时区?

Django - 上一小时的所有对象

Django:模型对象保存中的 datetime.now() 时间不一致

升级到 Django 1.8 后“提供的固定默认值”

如何更改我的 django 服务器时间

Django:我如何在管理面板中检测对象请求?