Получение миниатюры из исходного изображения без ввода изображения миниатюры вручную || Django Rest Framework

Я обнаружил проблему в проекте с Django REST Framework. Где в 'POST' я ввожу только 1 файл изображения, но в 'GET' я получу путь к файлу этого изображения, а также путь к файлу уменьшенной версии этого изображения.

class BookCover(models.Model):
     id = models.UUIDField(primary_key=True, max_length=36, default=uuid.uuid4)
     original = models.ImageField()
     thumbnail = ResizedImageField()

Здесь мы будем вводить исходное изображение, а не миниатюру. но в таблице мы получим уменьшенную версию исходного изображения в поле миниатюры.

Как мы можем это сделать? Любая помощь будет высоко оценена.

Во-первых, вы должны убедиться, что поле thumbnail является read_only в вашем сериализаторе, потому что вы явно хотите, чтобы оно было установлено из поля original.

class BookCoverSerializer(serializers.ModelSerializer):
  class Meta:
    ...
    read_only_fields = ['thumbnail']

Тогда можно реализовать изменение размера в методе сериализатора .save(). В качестве примера (реализуйте свой собственный метод resize_image):

class BookCoverSerializer(serializers.ModelSerializer):
  ...
  def save(self, **kwargs):
    instance = super().save(**kwargs)
    instance.thumbnail = resize_image(instance.original)
    instance.save()
    return instance

Проще было бы использовать что-то вроде Django VersatileImageField

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