Python django imagekit-缩略图字段未序列化
我有以下问题: 我正在django中编写一个AJAX视图,该视图为使用django imagekit扩展名的Python django imagekit-缩略图字段未序列化,python,json,django,serialization,django-imagekit,Python,Json,Django,Serialization,Django Imagekit,我有以下问题: 我正在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",
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()
该模型使用自定义管理器,使用内置的Django序列化程序(Django.core.serializers的实例)将其转换为JSON(JSONConvertibleManager
)
我的问题是,除了
ImageSpecField
完全被序列化之外,所有字段都被正确序列化。在序列化过程中是否可以返回instance.thumb.url
值?仅为获取信息,我使用了Django Rest框架,因此使用了该库中的序列化程序类
我的模型:
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',)
仅供参考,我使用的是Django Rest框架,因此使用了该库中的序列化程序类 我的模型:
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',)
不幸的是,由于DRF(prob.v2.x)的变化,被接受的答案不再有效。替换该行,它将适用于当前版本(3.5.3): 另一个具有更多控制(例如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
不幸的是,由于DRF(prob.v2.x)的变化,被接受的答案不再有效。替换该行,它将适用于当前版本(3.5.3): 另一个具有更多控制(例如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
基于@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都会这样做,基于@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都是如此