问题描述:
一张表的image类型为imageFiled
# ############################### 商品 ############################### class Category(models.Model): """类别名称 比如:螃蟹、大米、油等 """ categoryname = models.CharField(verbose_name="类别名称", max_length=30) image = models.ImageField(verbose_name="图片", max_length=128)
image字段存放的是云的图片Url地址
#小程序的一个接口,目的只是显示表内容,非常简单。
class categoryListView(ListAPIView):
""" 种类列表接口 """
queryset = models.Category.objects.order_by('id')
serializer_class = categoryModelSerializer
class categoryModelSerializer(serializers.ModelSerializer):
class Meta:
model = models.Category
fields = "__all__"
可是调用这个接口,返回的Image格式不仅加上了域名,并且url的格式也不对,变成这样了:"http://127.0.0.1:8000/https%3A/yjw-1318064838.cos.ap-nanjing.myqcloud.com/%25E5%2588%2586%25E7%25B1%25BB%25E5%259B%25BE1.jpg"
网上查了资料,说是重写get_serilaizer_context,将request值不返回就可以。
我测试之后还是有问题,域名是没有了,不过还是有一个斜杠,而且乱码的问题没有问题。
class categoryListView(ListAPIView):
""" 种类列表接口 """
queryset = models.Category.objects.order_by('id')
serializer_class = categoryModelSerializer
# 去掉self.request可以让图片没有本地域名的前缀
def get_serializer_context(self):
"""
Extra context provided to the serializer class.
"""
return {
'format': self.format_kwarg,
'view': self
}
经过研究,只需要将序列化器中输出Image时,将ImageFieldFile转换成string就行了。
class categoryListView(ListAPIView):
""" 种类列表接口 """
queryset = models.Category.objects.order_by('id')
serializer_class = categoryModelSerializer
class categoryModelSerializer(serializers.ModelSerializer):
image =serializers.SerializerMethodField()
class Meta:
model = models.Category
fields = "__all__"
def get_image(self,obj):
return str(obj.image)
这样就正常了。