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)