【问题标题】:Django-q how to delete scheduled tasks from codeDjango-q如何从代码中删除计划任务
【发布时间】: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)

非常感谢

【问题讨论】:

    标签: django django-q


    【解决方案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)

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 2021-07-05
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多