[Fixed]-Image file not deleted when object with ImageField field is deleted

32👍

Deletion of files associated with FileFields and ImageFields was intentionally removed in Django 1.3. See ticket #6456. Django uses transactions extensively to prevent data corruption if something goes wrong with the request. If a deletion transaction is rolled-backed, after the file has been deleted from the filesystem, then you now have a record pointing to a non-existent file. All tickets asking for automatic deletion to return have been summarily marked “Won’t Fix”, so this is not going to change.

For workarounds, see this previous StackOverflow question.

1👍

The assumptions?

class Picture(models.Model):
    image = ImageField(blank=True, null=True, upload_to="pics")

    def delete(self, *args, **kwargs):
        self.image.delete()
        super(Picture, self).delete(*args, **kwargs)

Then lets manually create and delete this..

image = "./image.jpg"
picture = Picture.objects.create(image=File(open(image, "r"))
picture.save()

Then delete it?

picture.delete()

HTH

Leave a comment