Получение миниатюры из исходного изображения без ввода изображения миниатюры вручную || 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