Delete FileField using delete(save=False) in signals post_delete Django


We can’t overwrite delete() for deleting FileField and related files in Django. As we know that :

In Django 1.3, when a model is deleted the FileField’s delete() method won’t be called. If you need cleanup of orphaned files, you’ll need to handle it yourself (for instance, with a custom management command that can be run manually or scheduled to run periodically via e.g. cron).


To delete files that followed by deleting records of fileField, we can use signals.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Insurances(models.Model):
    name = models.ForeignKey(User)
    attachment = models.FileField()


# Signals handler for deleting files after object record deleted
# In Django 1.3, delete a record not remove the associated files
def delete_filefield(sender, **kwargs):
    """Automatically deleted files when records removed.

    On Django 1.3, removing records will not followed by deleting files.
    Should manually delete PDF using signals post_delete.
    """
    model = kwargs.get(‘instance’)
    model.file.delete(save=False)

post_delete.connect(delete_filefield, Insurances)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.