diff --git a/rest_framework_json_api/renderers.py b/rest_framework_json_api/renderers.py index 427fdd9d..26362665 100644 --- a/rest_framework_json_api/renderers.py +++ b/rest_framework_json_api/renderers.py @@ -11,7 +11,7 @@ from rest_framework.serializers import BaseSerializer, ListSerializer, Serializer from rest_framework.settings import api_settings -from rest_framework_json_api import utils +from rest_framework_json_api import serializers, utils class JSONRenderer(renderers.JSONRenderer): @@ -535,12 +535,6 @@ def render(self, data, accepted_media_type=None, renderer_context=None): if serializer is not None: - # Get the serializer fields - fields = utils.get_serializer_fields(serializer) - - # Determine if resource name must be resolved on each instance (polymorphic serializer) - force_type_resolution = getattr(serializer, '_poly_force_type_resolution', False) - # Extract root meta for any type of serializer json_api_meta.update(self.extract_root_meta(serializer, serializer_data)) @@ -551,6 +545,18 @@ def render(self, data, accepted_media_type=None, renderer_context=None): resource = serializer_data[position] # Get current resource resource_instance = serializer.instance[position] # Get current instance + if isinstance(serializer.child, serializers.PolymorphicModelSerializer): + resource_serializer_class = serializer.child.\ + get_polymorphic_serializer_for_instance(resource_instance)() + else: + resource_serializer_class = serializer.child + + fields = utils.get_serializer_fields(resource_serializer_class) + force_type_resolution = getattr( + resource_serializer_class, '_poly_force_type_resolution', + False + ) + json_resource_obj = self.build_json_resource_obj( fields, resource, resource_instance, resource_name, force_type_resolution ) @@ -565,6 +571,9 @@ def render(self, data, accepted_media_type=None, renderer_context=None): if included: json_api_included.extend(included) else: + fields = utils.get_serializer_fields(serializer) + force_type_resolution = getattr(serializer, '_poly_force_type_resolution', False) + resource_instance = serializer.instance json_api_data = self.build_json_resource_obj( fields, serializer_data, resource_instance, resource_name, force_type_resolution