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

问题描述:

一张表的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)

这样就正常了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值