[英]Django easy-thumbnails serialize with Django Rest Framework
他們 GitHub 頁面上的文檔表明我正在嘗試做的事情應該有效:
thumb_url = profile.photo['avatar'].url
在我的項目中,它給出了一個錯誤:
THUMBNAIL_ALIASES = {
'': {
'thumb': {'size': (64, 64), 'upscale': False},
},
}
class Image(models.Model):
place = models.ForeignKey(Place, models.CASCADE, 'images')
image = ThumbnailerImageField(upload_to='')
class ImageSerializer(serializers.Serializer):
image = serializers.ImageField()
thumb = serializers.ImageField(source='image.image["thumb"].url')
AttributeError: Got AttributeError when attempting to get a value for field `thumb` on serializer `ImageSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Image` instance.
Original exception text was: 'ThumbnailerImageFieldFile' object has no attribute 'image["thumb"]'.
如果刪除thumb
, image
的 url 將正確序列化。 如何讓 DRF 序列化縮略圖的 url?
設置.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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.