加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-在Django Rest Framework序列化器中,如何获取图像的完整

发布时间:2020-12-17 17:38:09 所属栏目:Python 来源:网络整理
导读:在我的项目中,我想使用Serializer类获取图像的完整路径. 当我使用ViewSet类时,似乎得到正确的结果.但是,当使用API??View类时,并没有得到我所需要的. # the modelclass UserAccount(models.Model): ... icon = models.ImageField(upload_to='icon/user') # th

在我的项目中,我想使用Serializer类获取图像的完整路径.

当我使用ViewSet类时,似乎得到正确的结果.但是,当使用API??View类时,并没有得到我所需要的.

# the model
class UserAccount(models.Model):
    ...
    icon = models.ImageField(upload_to='icon/user')
# the serializer
class UserSerializer(serialziers.ModelSerializer):
    class Meta:
        model = UserAccount
        fields = (...,'icon')

使用ViewSet

# viewset
class UserViewSet(viewsets.ModelViewSet):
    ...
    serializer_class = UserSerializer

# result
# {...,'icon': 'http://127.0.0.1:8000/media/icon/user/filename'}

使用API??View

class UserView(APIView):
...
def get(self,request):
    ...
    userAccount = user.userAccount
    serializer = UserSerializer(userAccount)
    return Response(serializer.data)

# result
# {...,'icon': '/media/icon/user/filename'}

我应该怎么做才能在APIView中获得图像的完整路径?

最佳答案
您需要使用SerializerMethodField添加其他字段:

class UserSerializer(serializers.ModelSerializer):
    icon_url = serializers.SerializerMethodField()

    class Meta:
        model = UserAccount
        fields = (...,'icon_url') 

    def get_icon_url(self,user_account):
        request = self.context.get('request')
        icon_url = user_account.icon.url
        return request.build_absolute_uri(icon_url)

并在视图中向上下文添加请求:

def get(self,request):
    ...
    userAccount = user.userAccount
    serializer = UserSerializer(userAccount,context={'request':request})
    return Response(serializer.data)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读