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如何从代码中删除计划任务的主要内容,如果未能解决你的问题,请参考以下文章