python - 在 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 中获取图像的完整路径?
解决方案
您需要添加其他字段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)
推荐阅读
- javascript - 使用 JavaScript / jQuery 在两种颜色之间淡入淡出
- javascript - 如何将元素从一个 div 移动到另一个 div 并能够返回到主 div
- excel - 多个宏,防止单个录制的宏太大
- python - 当我将它分配给列表的第一个索引时,为什么我的值会发生变化?
- java - 如何在 JFreeChart 的气泡图上正确显示标签?
- python - Get Python Shell open
- azure - 运行 Azure Powershell 内联脚本
- symfony - 用 Symfony/XmlEncoder 转换这个数组的正确键/值语法是什么?
- c - 从旧的基于 GCC 的工具链更新,没有可用的源代码
- javascript - 在使用 nodejs/nodemon 重新启动服务器之前等待 npm run-script build 完成