From 5f02a0b0dac3b8cc45d2250874505aa5600faeae Mon Sep 17 00:00:00 2001 From: Nik Date: Thu, 28 Jul 2016 16:58:41 +0300 Subject: [PATCH] Fix detail_route and list_route serializer_class overrides in schemas --- rest_framework/schemas.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index 41dc82da1..2678921a1 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -255,12 +255,22 @@ class SchemaGenerator(object): if method not in ('PUT', 'PATCH', 'POST'): return [] - if not hasattr(view, 'get_serializer_class'): + serializer_class = None + + # looking for serializer_class override + if hasattr(callback, 'actions'): + func = getattr(view, callback.actions[method.lower()]) + if 'serializer_class' in getattr(func, 'kwargs', ()): + serializer_class = func.kwargs['serializer_class'] + + if serializer_class is None and hasattr(view, 'get_serializer_class'): + serializer_class = view.get_serializer_class() + + if serializer_class is None: return [] fields = [] - serializer_class = view.get_serializer_class() serializer = serializer_class() if isinstance(serializer, serializers.ListSerializer):