Django-filer PIL конвертирует и переопределяет оригинал

Чтобы заменить исходный файл преобразованной версией в webp, я сделал следующее в моем models.py:

django==2.2.17
django-filer==2.0.2
Pillow==8.0.0


class Provaa(File):
    data = models.DateTimeField(auto_now=True,)

    class Meta:
        managed = True
        verbose_name = 'Allegato'

    def convert_to_webp(self):
        extension = ['jpeg', 'png', 'jpg', 'img']
        if any(ext in self.file.name.lower() for ext in extension):
            try:
                img = Image.open(self.file)
                correggi_nome = self.file.name.split('.')[0]
                img.save(correggi_nome + '.webp','webp')
                logger.error('img.save save another copy of the file not repalce the original!')

            except Exception as ex:
                logger.error(ex)


    def save(self, *args, **kwargs):
        self.convert_to_webp()
        super(Provaa, self).save()

Это правильно сохраняет файл webp, но в текущей папке проекта, не заменяя исходный файл.

ipdb> type(self.file.file)
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
ipdb> type(self.file)
<class 'filer.fields.multistorage_file.MultiStorageFieldFile'>
ipdb> type(img)
<class 'PIL.PngImagePlugin.PngImageFile'>

Я пытался заменить файл self.file на img, но это не удалось. Мне не нужно сохранять исходный файл, только преобразованный файл.


person user2239318    schedule 11.02.2021    source источник


Ответы (1)


Просто создайте сериализатор DRF и переместите метод модели, который запускается во время проверки.

person user2239318    schedule 17.02.2021