Want to resize images uploaded to Django on the fly? It's actually very simple. This solution requires the Python Imaging Library (PIL).


import Image

class Company(models.Model):

    logo = models.ImageField(upload_to="static/images/logos")

    def save(self, force_insert=False, force_update=False):
        
        super(Company, self).save(force_insert, force_update)

        if self.id is not None:
            previous = Company.objects.get(id=self.id)
            if self.logo and self.logo != previous.logo:
                image = Image.open(self.logo.path)
                image = image.resize((96, 96), Image.ANTIALIAS)
                image.save(self.logo.path)
        

Updated: Django 1.2 requires that you save the file FIRST, otherwise the path will not be correct.