Django-q如何从代码中删除计划任务

Posted

技术标签:

【中文标题】Django-q如何从代码中删除计划任务【英文标题】:Django-q how to delete scheduled tasks from code 【发布时间】:2021-12-02 21:37:12 【问题描述】:

我使用 django-q 来安排与我的模型存储库中的条目相关的定期任务(代码在后面)。但是当我删除一个 Repository 条目时,关联的 Schedule 条目并没有被删除,因此关联的 django-q 作业不会被取消。 有什么想法吗?

from django_q.models import Schedule


class Repository(models.Model):
    id = models.AutoField(primary_key=True)
[...]
    scheduled_scan = models.ForeignKey(Schedule, on_delete=models.CASCADE, default=None, blank=True, null=True)

非常感谢

【问题讨论】:

【参考方案1】:

是的,它不会那样工作。 'on_delete' 属性指的是作为外键的模型。换句话说,它表示当 Schedule 被删除时,您的 Repository 也应该被删除,而不是相反。

要在删除存储库时删除计划,您可以覆盖存储库模型上的 delete 方法:

def delete(self, *args, **kwargs):
    # Delete the schedule
    Schedule.objects.get(pk=self.schedule_scan).delete()
    # Delete the repository
    super().delete(*args, **kwargs)

注意: 我不确定您是否可以将 schedule_scan 外键传递给 Schedule.objects.get(pk=self.schedule_scan) 中的 pk 参数,或者您是否必须手动将计划 ID 保存为IntegerField 在您的存储库模型上并进行查询。我必须尽快找出答案。

显然,是的,您可以使用 self.schedule_scan_id (Django 3.2 documentation)

【讨论】:

以上是关于Django-q如何从代码中删除计划任务的主要内容,如果未能解决你的问题,请参考以下文章

WIN10计划任务创建的计划无法修改或者删除怎么办?

在卸载时删除任务计划程序任务?

WordPress 计划任务删除超过 48 小时的行

Linux中计划任务管理的设置与删除 必看!必看!必看!!!

进程和计划任务管理(想提高工作效率吗?从计划工作任务开始)

进程和计划任务管理(想提高工作效率吗?从计划工作任务开始)