Django rest framework Django Rest框架-在基于模型的API视图中,每个方法单独的序列化程序类
假设我有一个简单的Django REST Framework视图,它扩展了多个模型类,并在一个URL端点中提供所有方法:Django rest framework Django Rest框架-在基于模型的API视图中,每个方法单独的序列化程序类,django-rest-framework,Django Rest Framework,假设我有一个简单的Django REST Framework视图,它扩展了多个模型类,并在一个URL端点中提供所有方法: class UserAPIView(RetrieveAPIView、DestroyAPIView、BaseObjectAPIView): 权限\类=(已验证,) serializer\u class=UserSerializer def get_序列化程序_类(self、*args、**kwargs): #根据方法返回不同的序列化程序?? #返回UserUpdateSeria
class UserAPIView(RetrieveAPIView、DestroyAPIView、BaseObjectAPIView):
权限\类=(已验证,)
serializer\u class=UserSerializer
def get_序列化程序_类(self、*args、**kwargs):
#根据方法返回不同的序列化程序??
#返回UserUpdateSerializer
返回UserViewSerializer
def get(自我、请求、*args、**kwargs):
"""
检索用户详细信息
"""
# ...
返回响应(数据={'result':“OK”},状态=200)
def删除(自我、请求、主键):
"""
删除用户
"""
# ...
返回响应(数据={'result':“OK”},状态=200)
def put(自我、请求、主键):
"""
更改用户
"""
# ...
返回响应(数据={'result':“OK”},状态=200)
现在,我需要为每个方法使用不同的序列化程序,因为get方法将使用与put方法不同的字段,例如序列化程序:
class UserViewSerializer(serializers.ModelSerializer):
firstname=serializers.Field(source='firstname')
lastname=serializers.Field(source='lastname')
username=serializers.Field(source='username')
类元:
模型=用户
类UserUpdateSerializer(serializers.ModelSerializer):
firstname=serializers.Field(source='firstname')
lastname=serializers.Field(source='lastname')
类元:
模型=用户
在基于模型的API视图中,是否可以为每个方法使用不同的序列化程序
更新:
我知道如何在方法本身内部使用不同的序列化程序
但我需要获得由Swagger(Django模块)生成的可浏览API,以便为每个方法检索不同的序列化程序。
我可以看到加载API浏览器页面会触发get_serializer_类,但在该方法中,我不知道Swagger试图为哪个方法获取序列化程序
如何让rest\u framework\u swagger为每个方法检索不同的序列化程序?我认为至少有两种方法可以实现这一点:
def get(self, request, *args, **kwargs):
self.serializer_class = UserViewSerializer
# ...
return Response(data={'result': "OK"}, status=200)
def get_serializer_class(self, *args, **kwargs):
if self.request.method == 'POST':
return UserUpdateSerializer
return UserViewSerializer
def get(self, request, *args, **kwargs):
self.serializer_class = UserViewSerializer
# ...
return Response(data={'result': "OK"}, status=200)
def get_serializer_class(self, *args, **kwargs):
if self.request.method == 'POST':
return UserUpdateSerializer
return UserViewSerializer
def put(self, request, pk):
"""Change user
---
serializer: .serializers.UserUpdateSerializer
"""
# ...
return Response(data={'result': "OK"}, status=200)
谢谢不幸的是,我问错了问题。实际上,我需要由Swagger生成的可浏览的webinterface来为每个方法使用不同的序列化程序。但是,当Swagger为API视图获取序列化程序时,无法确定Swagger为哪个方法调用get_serializer_类。也许我会发布一个新的更具体的问题,这不是他所问的,问题是可浏览API使用序列化程序类生成HTML表单,并且每个端点只能使用一个序列化程序类。你有没有找到解决方案?