0

I have a form with an imagefield in it and i want to give the images unique names to avoid overwriting how can i acheive that ?

models.py

class Payment(models.Model):
    Address = models.CharField(max_length=255)
    Payment_ID = models.ImageField(upload_to='pay_proof/')
    Status = models.CharField(max_length=5, default="X")
    Review_result = models.CharField(max_length=255, default="Not yet reviewed")
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created']

        def __unicode__(self):
            return u'%s'% self.Status

    def __str__(self):
        return self.Status
RaoufM
  • 525
  • 5
  • 22
  • Check out [this post](https://stackoverflow.com/questions/2673647/enforce-unique-upload-file-names-using-django/2677474#2677474) – Emmanuel Mtali May 06 '18 at 18:33

1 Answers1

1

Override the save method and give whatever name you want to give your Image file.

def uniqueimage(name):
    image_name = "Logic to uniquely name the image"
    return image_name

class Payment(models.Model):
    Address = models.CharField(max_length=255)
    Payment_ID = models.ImageField(upload_to='pay_proof/')
    Status = models.CharField(max_length=5, default="X")
    Review_result = models.CharField(max_length=255, default="Not yet reviewed")
    created = models.DateTimeField(auto_now_add=True)

    def save(self, *args, **kargs):
        if self.Payment_ID:
            self.Payment_ID.name = uniqueimage(str(self.Payment_ID.name))
        super(Payment, self).save(*args, **kwargs)

NOTE: Remember, this will not work when you directly update a field with .update method.

Shameer Kashif
  • 424
  • 3
  • 16