安排日期任务的最佳方法

时间:2019-10-31 12:59:36

标签: django django-models

考虑以下情况:
 -用户
 -力量
 -合格

在我的Power模型中,我赋予了超级用户创建自定义权力的能力,并且在创建权力的选项中,有一个字段可供他们选择何时可以使用这些权力的资格日期。 User并“金额”一个月内可以使用几次。那很简单,但是,我还有另一个名为Eligible的模型,它看起来像这样:

class Eligible(models.Model):
    user = models.ForeignKey(User, on_delete=blahblah)
    power = models.ForeignKey(Power)
    eligible = models.BooleanField()
    balance = models.DecimalField(max_digits=8, decimal_places=2)

创建用户时,将Power链接到该用户对象(如果他们立即具有资格),则将创建Eligible模型中该Power的用户对象,并设置eligible字段设置为true并将金额添加到他们的余额中,如果他们不符合条件,则将其设置为false,然后我要创建一个任务,该任务每月自动更新其余额。

  • 为每个对象安排任务的日期?
  • 每24小时运行一次任务,以对所有不合格的用户进行迭代,如果该日期是合格日期,则使他们符合条件?

如果是这样,我该怎么做?

谢谢您的时间。我尽力写这篇清醒的人的话。

1 个答案:

答案 0 :(得分:1)

你不知道。您可以简单地编写一些逻辑,如果当前的tiemstamp晚于该时间戳,则进行检查

例如,Power模型如下:

class Power(models.Model):
    activate = models.DateTimeField()

然后我们可以实现如下逻辑:

from django.utils.timezone import now

class Eligible(models.Model):
    user = models.ForeignKey(User, on_delete=…)
    power = models.ForeignKey(Power, on_delet=…)
    immediately_eligible = models.BooleanField()

    @property
    def is_eligible(self):
        return self.immediately_eligible or now() >= self.power.activate

如果is_eligible设置为True,或者时间戳晚于(或等于){{1},则immediately_eligible属性将为True }。