Я думаю, что нет необходимости удалять предыдущие задачи.Вам просто нужно подтвердить, что выполняемая задача является продолжительной.Для этого создайте новое поле с именем контрольной суммы, которое является полем UUID, обновляйте это поле каждый раз, когда вы меняете notify_on.Проверьте эту контрольную сумму в задаче, в которую вы отправляете электронное письмо.
class Notification(models.Model):
checksum = models.UUIDField(default=uuid.uuid4)
notify_on = models.DateTimeField()
def notification_post_save(instance, *args, **kwargs):
send_notification.apply_async((instance.id, str(instance.checksum)),eta=instance.notify_on)
signals.post_save.connect(notification_post_save, sender=Notification)
@shared_task
def send_notification(notification_id, checksum):
notification = Notification.objects.get(id=notification_id)
if str(notification.checksum) != checksum:
return False
#send email
Также, пожалуйста, не отправляйте сигнал каждый раз при уведомлении об объекте, сохраните, просто отправьте его при изменении notify_on.Вы также можете проверить это Определить измененные поля в django post_save signal