DRF- how to return field which is not included in model in response

Viewed 52

I have view:

class SomeView(APIView):
   def get(self,request):
   serializer = serializers.SomeViewSerializer
   return Response({'result_url': ???})

and serializer:

class SomeViewSerializer(serializers.Serializer):
   url = serializers.SerializerMethodField()

   def get_url(self):
      res_id = genetare_url(self.id)
      return res_id

in this case url is not part of any model, but I want to return only this (result of get_url) in response, but I couldn't figure out how to write it in view above. any help will be appriciated, thank you

2 Answers

You can simply call the serializer's method.

class SomeView(APIView):
   def get(self, request):
       serializer = serializers.SomeViewSerializer()
       return Response({'result_url': serializer.get_url()})

Try this one. Add obj parameter into MethodFiled get_url(self, obj)

class SomeViewSerializer(serializers.Serializer):
   url = serializers.SerializerMethodField()

   def get_url(self, obj):
      res_id = genetare_url(self.id)
      return res_id

and pass any data into serializer

ex: SomeViewSerializer(request.data) like this:

class SomeView(APIView):

    def get(self, request, format=None):
        serializer = SomeViewSerializer(request.data)
        return Response(serializer.data)

This might help you.

Related