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”]现在不起作用了。你这个传奇谢尔盖!这正是我需要的。像个符咒一样有效。你这个传奇谢尔盖!这正是我需要的。像个符咒一样有效。