我有以下问题:
我正在用django编写一个AJAX视图,该视图从使用django-imagekit扩展的ImageSpecField的模型中提供关于图像列表的JSON数据:
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值吗?
发布于 2014-10-23 23:09:03
为了获取信息,我使用了Django Rest Framework,因此使用了那个库中的序列化器类。
我的模特:
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)我的序列化器:
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',)发布于 2016-12-08 23:09:32
不幸的是,由于DRF (prob )的变化,被接受的答案不再起作用。( v2.x)。替换这一行,它将与当前版本(3.5.3)一起工作:
thumbnail = serializers.ReadOnlyField(source="thumbnail.url")另一个拥有更多控制(例如url修改)的解决方案是:
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发布于 2019-03-07 10:10:24
基于@Insa给出的一个很好的解决方案.
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都是这样
https://stackoverflow.com/questions/25240722
复制相似问题