Login

Pre-delete signal function for deleting files a model

Author:
mindcruzer
Posted:
September 19, 2012
Language:
Python
Version:
1.4
Tags:
remove delete signals file
Score:
0 (after 0 ratings)

This snippit is meant to be used with the pre_delete signal to delete any files associated with a model instance before the instance is deleted. It will search the model instance for fields that are subclasses of FieldFile, and then delete the corresponding files. As such, it will work with any model field that is a subclass of FileField.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.db.models.fields.files import FieldFile

def file_cleanup(sender, instance, *args, **kwargs):
    '''
        Deletes the file(s) associated with a model instance. The model
        is not saved after deletion of the file(s) since this is meant
        to be used with the pre_delete signal.
    '''
    for field_name, _ in instance.__dict__.iteritems():
        field = getattr(instance, field_name)
        if issubclass(field.__class__, FieldFile) and field.name:
            field.delete(save=False)

...

from django.db import models
from django.db.models.signals import pre_delete

class SomeModel(models.Model):
    ...
    my_file = models.FileField(upload_to='my_files')
    ...

# delete my_file when we delete an instance of SomeModel
pre_delete.connect(file_cleanup, sender=SomeModel)

More like this

  1. Unzip a .zip file uploaded with FileBrowser by shacker 5 years, 6 months ago
  2. Django Admin Replacer Code by riccardodivirgilio 4 years, 8 months ago
  3. Render markdown to a separate model field by mindcruzer 2 years, 10 months ago
  4. Update timestamp If any instance field has changed by craigruks 3 years, 11 months ago
  5. Validating Model subclass by slacy 3 years, 6 months ago

Comments

un1t (on March 17, 2015):

There is special app for that django-cleanup

pip install django-cleanup

settings.py

INSTALLED_APPS = (
    ...
    'django_cleanup', # should go after your apps
)

#

Please login first before commenting.