Django Rest Framework с легкими миниатюрами
С обычным ImageField сериализация URL просто image = serializers.ImageField()
, Как это должно выглядеть при использовании easy-thumbnails?
До сих пор я нашел только функцию для получения URL: Django easy_thumbnails для доступа к URL-адресам изображений Использование этого в сериализаторе потребовало бы SerializerMethodField, что является неудовлетворительным решением. Я ищу решение, которое было бы таким же эффективным и эффективным, как практичное, и с одной стороны.
1 ответ
Лучшее решение, вероятно, для подкласса serializers.ImageField()
и используйте код, который вы нашли в to_representation
метод ( документы для пользовательских полей). Ваше поле может выглядеть так:
from easy_thumbnails.templatetags.thumbnail import thumbnail_url
class ThumbnailSerializer(serializers.ImageField):
def to_representation(self, instance):
return thumbnail_url(instance, 'small')
Settings .py
THUMBNAIL_ALIASES = {
'': {
'avatar': {'size': (40, 40)},
'image': {'size': (128, 128)},
},
}
api /serializers.py
from easy_thumbnails.templatetags.thumbnail import thumbnail_url
class ThumbnailSerializer(serializers.ImageField):
def __init__(self, alias, *args, **kwargs):
super().__init__(*args, **kwargs)
self.read_only = True
self.alias = alias
def to_representation(self, value):
if not value:
return None
url = thumbnail_url(value, self.alias)
request = self.context.get('request', None)
if request is not None:
return request.build_absolute_uri(url)
return url
с помощью
from api.serializers import ThumbnailSerializer
class ProfileSerializer(serializers.ModelSerializer):
image = ThumbnailSerializer(alias='image')
avatar = ThumbnailSerializer(alias='avatar', source='image')
Использование sorl-thumbnail https://sorl-thumbnail.readthedocs.io/en/latest/examples.html вместе с этим полем сериализатора https://github.com/dessibelle/sorl-thumbnail-serializer-field в DRF может решать проблему. Он очень прост в использовании, поскольку вам не нужно менять свою модель, просто перенесите миниатюру, которая создает таблицу в вашей базе данных для хранения пары ключ-значение для ваших пальцев;
Простой пакет для сериализации поля easy thumbnailer: https://github.com/yashas123/easy-thumbnails-rest