DRF ImageFiled字段时会加上域名和乱码的问题

问题描述:

一张表的image类型为imageFiled

# ############################### 商品 ###############################
class Category(models.Model):
    """类别名称
    比如:螃蟹、大米、油等
    """
    categoryname = models.CharField(verbose_name="类别名称", max_length=30)
    image =  models.ImageField(verbose_name="图片", max_length=128)

DRF ImageFiled字段时会加上域名和乱码的问题_第1张图片 

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"

DRF ImageFiled字段时会加上域名和乱码的问题_第2张图片

 网上查了资料,说是重写get_serilaizer_context,将request值不返回就可以。

DRF ImageFiled字段时会加上域名和乱码的问题_第3张图片

 我测试之后还是有问题,域名是没有了,不过还是有一个斜杠,而且乱码的问题没有问题。

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
        }

DRF ImageFiled字段时会加上域名和乱码的问题_第4张图片

 经过研究,只需要将序列化器中输出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)

这样就正常了。

DRF ImageFiled字段时会加上域名和乱码的问题_第5张图片

 

你可能感兴趣的:(前端,django,DRF)