Django-q как удалить запланированные задачи из кода

Я использую django-q для планирования периодического задания, связанного с записью в моей модели Repository (код здесь). Но когда я удаляю запись 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)

спасибо большое

Да, так работать не будет. Атрибут 'on_delete' относится к модели, являющейся внешним ключом. Другими словами, он говорит, что когда расписание удаляется, ваше хранилище тоже должно быть удалено, а не наоборот.

Для удаления расписания при удалении хранилища вы можете переопределить метод delete в модели Repository:

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 в параметр pk в Schedule.objects.get(pk=self.schedule_scan) или вам придется сохранить ID расписания вручную как IntegerField в вашей модели репозитория и запросить его. Мне придется выяснить это в ближайшее время.

Очевидно, да, вы можете, используя self.schedule_scan_id ( документация Django 3.2)

Вернуться на верх