首页 文章

从数据库中删除回调?

提问于
浏览
0

我的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

    正如评论中所提到的,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")
    

相关问题