首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-imagekit -缩略图字段未序列化

django-imagekit -缩略图字段未序列化
EN

Stack Overflow用户
提问于 2014-08-11 10:06:40
回答 3查看 1.3K关注 0票数 1

我有以下问题:

我正在用django编写一个AJAX视图,该视图从使用django-imagekit扩展的ImageSpecField的模型中提供关于图像列表的JSON数据:

代码语言:javascript
复制
class Image(models.Model):
   title = models.CharField(max_length=120)
   img = models.ImageField(upload_to="images")
   thumb = ImageSpecField(source="img",
       id="core:image:image_thumbnail"
     )
   objects = models.Manager()
   json_data = JSONConvertibleManager()

该模型使用自定义管理器将其转换为JSON (JSONConvertibleManager),使用内置的Django序列化程序(django.core.serializers实例)。

我的问题是,除了ImageSpecField之外,所有字段都被正确地序列化了。在序列化过程中可以返回instance.thumb.url值吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-23 23:09:03

为了获取信息,我使用了Django Rest Framework,因此使用了那个库中的序列化器类。

我的模特:

代码语言:javascript
复制
class Photo(models.Model):
    """ Photograph """
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=255)
    original_image = models.ImageField(upload_to='boxes')
    formatted_image = ImageSpecField(source='original_image', format='JPEG',
        options={'quality': 90})
    thumbnail = ImageSpecField([Adjust(contrast=1.2, sharpness=1.1),
        ResizeToFill(200, 115)], source='original_image',
        format='JPEG', options={'quality': 90})
    num_views = models.PositiveIntegerField(editable=False, default=0)

我的序列化器:

代码语言:javascript
复制
class PhotoSerializer(serializers.ModelSerializer):
    original_image = serializers.Field('original_image.url')
    thumbnail = serializers.Field('thumbnail.url')

    class Meta:
        model = Photo
        fields = ('id', 'title', 'original_image', 'thumbnail',)
票数 4
EN

Stack Overflow用户

发布于 2016-12-08 23:09:32

不幸的是,由于DRF (prob )的变化,被接受的答案不再起作用。( v2.x)。替换这一行,它将与当前版本(3.5.3)一起工作:

代码语言:javascript
复制
thumbnail = serializers.ReadOnlyField(source="thumbnail.url")

另一个拥有更多控制(例如url修改)的解决方案是:

代码语言:javascript
复制
class PhotoSerializer(serializers.ModelSerializer):
    original_image = serializers.SerializerMethodField()

    class Meta:
        model = Photo
        fields = ('id', 'title', 'original_image')

    def get_original_image(self, obj):
        # some processing
        return obj.original_image.url
票数 2
EN

Stack Overflow用户

发布于 2019-03-07 10:10:24

基于@Insa给出的一个很好的解决方案.

代码语言:javascript
复制
class PhotoSerializer(serializers.ModelSerializer):
    original_image = serializers.SerializerMethodField()

    class Meta:
        model = Photo
        fields = ('id', 'title', 'original_image')

    def get_original_image(self, obj):
        if bool(obj.original_image):
            return self.context['request'].build_absolute_uri(obj.original_image.url)
        return ''

获取缩略图的绝对url,默认情况下所有ImageFields都是这样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25240722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档