我有一个模型视图集和一些额外的操作。
class TestViewset(
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
mixins.UpdateModelMixin,
GenericViewSet,
):
permission_classes = [CustomPermissionClass]
def get_serializer_class(self) -> Type[ModelSerializer]:
if self.action == "list" or self.action == "get":
return FirstSerializer
return SecondSerializer
@action(
detail=True,
methods=["POST"],
url_path="test-path",
url_name="test-path",
serializer_class=MyCustomSerializer,
)
def test_path(self, request: Request, **kwargs) -> Response:
print(self.get_serializer()) # Despite setting the 'MyCustomSerializer' it still gives me 'SecondSerializer'
return Response(status=status.HTTP_200_OK)
如果我删除该get_serializer_class
方法并只提供一个序列化程序,它就可以工作。
什么可能是最好的解决方案,或者这是 drf 中的任何错误?
理想情况下,额外的操作应该使用已经提供的序列化程序类,但不是。
对此可能有更好的方法,但在我的脑海中,您可以通过将您的更改get_serializer_class
为:
def get_serializer_class(self) -> Type[ModelSerializer]:
if self.action == "list" or self.action == "get":
return FirstSerializer
return self.serializer_class or SecondSerializer
serializer_class
如果操作既不是列表也不是获取,这将确保使用您的操作中定义的那个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句