Django REST序列化器优化:将图片字段改为URL列表输出
Django REST序列化器调整:将images字段转为纯URL列表
你需要把嵌套的ProductImage对象列表转换成仅包含图片URL的字符串数组,最简单的方式是使用Django REST Framework的SerializerMethodField来自定义images字段的输出,不用再依赖ProductImageSerializer了。
修改后的序列化器代码
直接调整ProductSerializer即可:
class ProductSerializer(serializers.ModelSerializer): # 用SerializerMethodField自定义images字段的输出 images = serializers.SerializerMethodField() def get_images(self, obj): # 遍历当前Product关联的所有ProductImage,提取每个图片的完整URL return [image.image_addr.url for image in obj.images.all()] class Meta: model = Product fields = ('id', 'name', 'description', 'price', 'images')
原理说明
SerializerMethodField会调用对应的get_<field_name>方法(这里是get_images)来生成字段值obj.images.all()获取当前Product对象关联的所有ProductImage实例(因为你在ProductImage模型里设置了related_name='images')image.image_addr.url会自动返回图片的完整访问URL,和你之前序列化器输出的image_addr值完全一致
这样修改后,接口返回的images字段就会变成你想要的纯URL数组格式,不需要改动模型或视图代码。
内容的提问来源于stack exchange,提问作者Max Price
相关产品推荐
相关产品推荐

