如何在模型字段中的特定日期触发 Django 任务

问题描述 投票:0回答:1

我有一个包含以下字段的模型

class EventConfig(models.Model):
   end_date = models.DateTimeField(blank=True, null=True)

我安装了 celery,它会定期发送电子邮件并按设定的时间间隔(例如每小时或中午 12 点)触发其他任务。但是,如果我想在到达“end_date”时触发电子邮件,最好的方法是什么?我意识到我可以设置一个 Celery 计划每分钟运行一次来检查日期,但是每 60 秒运行一次批处理作业,这是最好的方法还是会有缺点?

有没有办法例如设置 crontab 计划从值列表中读取,以便我可以像 schedule_list = EventConfig.objects.all().values_list(end_date, flat=True)schedule_list 那样。每当保存模型实例时追加(self.end_date),并让 Celery 从“schedule_list”读取,以便批处理作业仅在正确的时间点火?

或者有没有更好的方法可以用或不用芹菜来做到这一点?

python django celery cron-task periodic-task
1个回答
0
投票

您可以在模型上使用@property来检查当前日期是否大于结束日期

@property
def is_expired(self):
    return date.today() > self.end_date

然后您可以通过

if obj.is_expired

查看
© www.soinside.com 2019 - 2024. All rights reserved.