diff --git a/src/drf_yasg/utils.py b/src/drf_yasg/utils.py index dc8de25..2a71c3e 100644 --- a/src/drf_yasg/utils.py +++ b/src/drf_yasg/utils.py @@ -7,6 +7,7 @@ from django.db import models from django.utils.encoding import force_text from rest_framework import serializers, status from rest_framework.mixins import DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin +from rest_framework.parsers import FileUploadParser from rest_framework.request import is_form_media_type from rest_framework.settings import api_settings as rest_framework_settings from rest_framework.utils import encoders, json @@ -366,6 +367,7 @@ def get_consumes(parser_classes): :rtype: list[str] """ parser_classes = get_object_classes(parser_classes) + parser_classes = [pc for pc in parser_classes if not issubclass(pc, FileUploadParser)] media_types = [parser.media_type for parser in parser_classes or []] non_form_media_types = [encoding for encoding in media_types if not is_form_media_type(encoding)] if len(non_form_media_types) == 0: diff --git a/testproj/articles/views.py b/testproj/articles/views.py index 0a630a7..e0884a9 100644 --- a/testproj/articles/views.py +++ b/testproj/articles/views.py @@ -7,7 +7,7 @@ from rest_framework import viewsets # noinspection PyDeprecation from rest_framework.filters import OrderingFilter from rest_framework.pagination import LimitOffsetPagination -from rest_framework.parsers import MultiPartParser +from rest_framework.parsers import MultiPartParser, FileUploadParser from rest_framework.response import Response from articles import serializers @@ -118,7 +118,7 @@ class ArticleViewSet(viewsets.ModelViewSet): type=openapi.TYPE_INTEGER, description="this should not crash (form parameter on DELETE method)" )]) - @detail_route(methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser,)) + @detail_route(methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser, FileUploadParser)) def image(self, request, slug=None): """ image method docstring diff --git a/testproj/snippets/views.py b/testproj/snippets/views.py index 3df0cab..bf90d83 100644 --- a/testproj/snippets/views.py +++ b/testproj/snippets/views.py @@ -2,7 +2,7 @@ from djangorestframework_camel_case.parser import CamelCaseJSONParser from djangorestframework_camel_case.render import CamelCaseJSONRenderer from inflection import camelize from rest_framework import generics, status -from rest_framework.parsers import FormParser +from rest_framework.parsers import FormParser, FileUploadParser from drf_yasg import openapi from drf_yasg.inspectors import SwaggerAutoSchema @@ -22,7 +22,7 @@ class SnippetList(generics.ListCreateAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer - parser_classes = (FormParser, CamelCaseJSONParser,) + parser_classes = (FormParser, CamelCaseJSONParser, FileUploadParser) renderer_classes = (CamelCaseJSONRenderer,) swagger_schema = CamelCaseOperationIDAutoSchema