首页 > 解决方案 > 在 Django Rest Framework Serializer 中,如何获取图像的完整路径?

问题描述

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

当我使用 ViewSet 类时,它似乎得到了正确的结果。但是当使用 APIView 类时,它并没有得到我需要的东西。

# 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
class UserViewSet(viewsets.ModelViewSet):
    ...
    serializer_class = UserSerializer

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

使用 APIView

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

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

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

标签: pythondjangodjango-rest-framework

解决方案


您需要添加其他字段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)

并在视图中添加request上下文:

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

推荐阅读