Django Rest Framework File Upload

I am using Django Rest Framework and AngularJs to upload a file. My view file looks like this:

    class ProductList(APIView):
        authentication_classes = (authentication.TokenAuthentication,)
        def get(self,request):
            if request.user.is_authenticated(): 
                userCompanyId = request.user.get_profile().companyId
                products = Product.objects.filter(company = userCompanyId)
                serializer = ProductSerializer(products,many=True)
                return Response(serializer.data)

        def post(self,request):
            serializer = ProductSerializer(data=request.DATA, files=request.FILES)
            if serializer.is_valid():
                serializer.save()
                return Response(data=request.DATA)

As the last line of post method should return all the data, I have several q:

  • how to check if there is anything in request.FILES?
  • how to serialize file field?
  • how should I use parser?

Use the FileUploadParser, it's all in the request. Use a put method instead, you'll find an example in the docs :)

    class FileUploadView(views.APIView):
        parser_classes = (FileUploadParser,)

        def put(self, request, filename, format=None):
            file_obj = request.FILES['file']
            # do some stuff with uploaded file
            return Response(status=204)

From: stackoverflow.com/q/20473572