Django с django-cleanup не может удалить старые файлы

Имеется модель ZipPrice, описывающая детали. В модели переопределен метод сохранения, использующий PIL.Image, который преобразует загружаемый через форму файл в формат jpeg, создает дополнительный файл миниатюр и сохраняет их под нужными именами. Также используется модуль django-cleanup для удаления ненужных файлов.

models.py

from PIL import Image
class ZipPrice(models.Model):
    id = models.SmallAutoField(primary_key=True)
    name = models.CharField(max_length=200, unique=True)
    price = models.IntegerField()
    full_image = models.ImageField(upload_to='zips/',
                                   null=False, max_length=255, default=settings.DEFAULT_IMAGE['full'])
    small_image = models.ImageField(upload_to='zips/',
                                    null=False, max_length=255, default=settings.DEFAULT_IMAGE['small'])

    class Meta:
        db_table = 'zip_price'
        ordering = ['-full_image']

    def save(self, **kwargs):
        with Image.open(self.full_image).convert('RGB') as img:
            output_full = BytesIO()
            output_small = BytesIO()
            exif = img.getexif()
            img.save(output_full, format='JPEG', exif=exif)
            img.thumbnail((250, 250))
            img.save(output_small, format='JPEG', exif=exif)
            file_name = get_random_string(length=32)
            self.full_image = InMemoryUploadedFile(output_full, 'full_image', f'{file_name}_full.jpg', 'image/jpeg',
                                                   sys.getsizeof(output_full), None)
            self.small_image = InMemoryUploadedFile(output_small, 'small_image', f'{file_name}_small.jpg', 'image/jpeg',
                                                    sys.getsizeof(output_small), None)
        super().save()

views.py

@method_decorator(login_required, name='dispatch')
class CatalogEditZip(UpdateView):
    model = ZipPrice
    form_class = ZipForm
    success_url = reverse_lazy('catalog_zip')
    template_name = 'repair/catalog_edit_zip.html'

forms.py

class ZipForm(forms.ModelForm):

    class Meta:
        model = ZipPrice
        fields = {'name', 'price', 'full_image'}
        labels = {'name': 'Name',
                  'price': 'Price',
                  'full_image': 'Image'
                  }
        widgets = {'name': Textarea(attrs={'cols': 50, 'rows': 4})}

Если я редактирую экземпляр модели через форму с загрузкой нового файла, то все в порядке. Если без загрузки нового файла, то происходит следующее: метод save создает 2 новых файла, что по сути является лишним, Однако django-cleanup не может удалить существующий файл, потому что он занят: PermissionError: [WinError 32] Процесс не может получить доступ к файлу, потому что файл занят другим процессом Как я могу обойти эту проблему?

Вернуться на верх