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)