使用普通的ImageField,序列化URL只是image = serializers.ImageField()
。使用简易缩略图时应该是什么样的?
到目前为止,我只找到了获取网址的功能:Django easy_thumbnails accessing image URLs 在串行器中使用它需要SerializerMethodField,这是一个不令人满意的解决方案。我正在寻找一种尽可能高效/高效的解决方案,并且在一条线上。
答案 0 :(得分:6)
最佳解决方案可能是serializers.ImageField()
的子类,并使用您在to_representation
方法(docs for custom fields)中找到的代码。您的字段可能如下所示:
from easy_thumbnails.templatetags.thumbnail import thumbnail_url
class ThumbnailSerializer(serializers.ImageField):
def to_representation(self, instance):
return thumbnail_url(instance, 'small')
答案 1 :(得分:1)
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')
答案 2 :(得分:0)
在DRF中将sorl-thumbnail https://sorl-thumbnail.readthedocs.io/en/latest/examples.html与此序列化字段https://github.com/dessibelle/sorl-thumbnail-serializer-field一起使用可以解决此问题。它非常易于使用,因为您不需要更改模型,只需迁移缩略图即可在数据库中创建一个表,以保存拇指的键值对;
答案 3 :(得分:0)
一个简单的程序包,用于序列化简单的缩略图字段:https://github.com/yashas123/easy-thumbnails-rest