首页科技资讯详情

Django通过signal(信号)实现对所有的model(模型)删除记录时自动删除FileField、ImageField字段的文件

来源网络2021-08-31 22:24:19 250

假设startapp创建的app为app1

在app1中创建一个helpers模块,加入如下代码:

from django.db import modelsfrom django.db.models.signals import pre_deletefrom django.dispatch import receiverdef bind_delete_signal(model):
    @receiver(pre_delete, sender=model)
    def pre_model_delete(sender, **kwargs):
        for field in sender._meta.get_fields():
            if isinstance(field, models.FileField) or isinstance(field, models.ImageField):
                instance = kwargs.get('instance')
                getattr(instance, field.name).delete()

Python


在apps.py中的App1Config类中重写ready方法:

    def ready(self):
        from app1.helpers import bind_delete_signal        for model in self.get_models():
            bind_delete_signal(model)

Python


这样,在删除模型实例的时候,只要模型实例有 FileField 和 ImageField 相关的字段,就会自动删除相关的文件


标签:
随机快审展示 刷新 快审榜
加入快审,优先展示

加入VIP

提交站点
提交文章
提交小程序
提交公众号