обратный вызов при удалении из базы данных? - PullRequest
0 голосов
/ 09 декабря 2018

Мое приложение Django использует хранилище Amazon S3 для файлов данных пользователя, которые они загрузили.Я храню указатель (используя uuid) на файл в модели:

model.py:

class Gedcom(models.Model):
"""Gedcom model."""

user = models.ForeignKey(User, on_delete=models.CASCADE)
filename = models.CharField(max_length=100, default="")
title = models.CharField(max_length=100, default="")
uuid = models.CharField(max_length=36, default="")

Есть ли способ выполнить обратный вызов сортов, когда элемент gedcomудалил (скажем, через интерфейс администратора или через мой другой код), что вызван метод, чтобы я мог удалить этот файл из S3?

Я мог запустить функцию управления как часть задания cron, которое удаляет несвязанныйфайл на S3, если их больше нет в локальной базе данных, но мне интересно, есть ли другой способ сделать это, который чище?

1 Ответ

0 голосов
/ 09 декабря 2018

Как уже упоминалось в комментариях, сигнал post_delete - это путь:

from django.db.models.signals import post_delete

@receiver(post_delete, sender=Gedcom, dispatch_uid='gedcom_s3_delete')
def s3_delete(sender, instance, using, **kwargs):
    if settings.enable_s3:
        try:
            s3 = boto3.resource('s3')
            file = s3.Object(settings.s3_bucket, instance.uuid)
            file.delete()
        except:
            print("Unable to delete from S3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...