Django easy缩略图使用Django Rest框架序列化
这表明我正在努力做的应该是:Django easy缩略图使用Django Rest框架序列化,django,django-rest-framework,easy-thumbnails,Django,Django Rest Framework,Easy Thumbnails,这表明我正在努力做的应该是: thumb\u url=profile.photo['avatar'].url 在我的项目中,它给出了一个错误: THUMBNAIL_ALIASES = { '': { 'thumb': {'size': (64, 64), 'upscale': False}, }, } class Image(models.Model): place = models.ForeignKey(Place, models.CASCADE, '
thumb\u 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?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
使用
设置.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
使用
也许您应该使用“image[“thumb”]”而不是“image.image[“thumb”]”。这会得到一个类似的错误:在尝试获取序列化程序
ImageSerializer
上的字段thumb
的值时,获取了AttributeError。序列化程序字段的名称可能不正确,并且与图像
实例上的任何属性或键都不匹配。原始异常文本为:“图像”对象没有属性“图像[“拇指”]”`我的意思是“thumb=serializers.ImageField(source='image[“thumb”].url'))”是的,这正是我所尝试的。我认为是“thumb”]现在不起作用。也许你应该使用“image[“thumb”]”而不是“image.image[“thumb”]“。这会得到一个类似的错误:在尝试获取序列化程序ImageSerializer
上的字段thumb
的值时,获取了AttributeError。”。序列化程序字段的名称可能不正确,并且与图像
实例上的任何属性或键都不匹配。原始异常文本为:“图像”对象没有属性“图像[“拇指”]”`我的意思是“thumb=serializers.ImageField(source='image[“thumb”].url'))”是的,这正是我尝试过的。我想是“[“thumb”]现在不起作用了。你这个传奇谢尔盖!这正是我需要的。像个符咒一样有效。你这个传奇谢尔盖!这正是我需要的。像个符咒一样有效。