Django - Загруженное изображение сохраняется дважды: под оригинальным и проверенным именем

Я пытаюсь решить проблему. При загрузке файла изображения я хочу переименовать файл и изменить его размер. Я придумал следующий метод. Мне удалось изменить размер изображения и сохранить его под правильным именем.

К сожалению, файл сохраняется дважды, также под недопустимым именем. И недопустимое имя сохраняется в моем объекте. Как я могу это исправить? Заранее спасибо

class SparePartImages(models.Model):
  sparepart = models.ForeignKey('SparePart', on_delete=models.CASCADE)
  image = models.ImageField(upload_to='spare-part/', blank=True, null=True)

  def save(self, *args, **kwargs):
    super(SparePartImages, self).save(*args, **kwargs)
    max_size = settings.IMAGE_MAX_SIZE
    file = Image.open(self.image)
    (width, height) = file.size
    if (width/max_size < height/max_size):
      factor = height/max_size
    else:
      factor = width/max_size
    size = (int(width/factor), int(height/factor))
    file = file.resize(size, Image.ANTIALIAS)

    file.save(removeAccent(self.image.path))

Вы вызываете save дважды, один раз с super, а другой с save, чтобы исправить это, сделайте следующее:

from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
import sys

class SparePartImages(models.Model):
 # rest of the code
 def save(self, *args, **kwargs):
   # rest of the code 
   # but remove file.save(removeAccent(self.image.path))
   output = BytesIO()
   file.save(output, format='JPEG', quality=100)
   output.seek(0)
   self.image = InMemoryUploadedFile(
      output ,'ImageField', "%s.jpg" %self.image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None
   )
   super(SparePartImages, self).save(*args, **kwargs)
Вернуться на верх