I need to write my own APIView class which overrides drf's APIView and it will have autogenerated self.context which I can pass into serializer. For example
class SomeView(APIView):
def post(self, request):
ser = SomeSerializer(data=request.data, context = self.context)
ser.is_valid(raise_exception=True)
return Response(ser.validated_data)
Why not use the GenericAPIView
[drf-doc] which does that already?
Indeed, we can work with:
class SomeView(GenericAPIView):
serializer_class = SomeSerializer
def post(self, request):
ser = self.get_serializer(data=request.data)
ser.is_valid(raise_exception=True)
return Response(ser.validated_data)
This will use the get_serializer_context()
method, by default this will pass the request
, format
, and view
to the context, but you can add extra context data like:
class SomeView(GenericAPIView):
serializer_class = SomeSerializer
def post(self, request):
ser = self.get_serializer(data=request.data)
ser.is_valid(raise_exception=True)
return Response(ser.validated_data)
def get_serializer_context(self):
return {**super().get_serializer_context(), 'foo': 42}
This will thus add an extra foo
item as context.