@@ -362,7 +362,8 @@ def extract_included(cls, fields, resource, resource_instance, included_resource
362362 serializer_fields ,
363363 serializer_resource ,
364364 nested_resource_instance ,
365- resource_type
365+ resource_type ,
366+ getattr (serializer , '_poly_force_type_resolution' , False )
366367 )
367368 )
368369 included_data .extend (
@@ -384,7 +385,8 @@ def extract_included(cls, fields, resource, resource_instance, included_resource
384385 included_data .append (
385386 cls .build_json_resource_obj (
386387 serializer_fields , serializer_data ,
387- relation_instance , relation_type )
388+ relation_instance , relation_type ,
389+ getattr (field , '_poly_force_type_resolution' , False ))
388390 )
389391 included_data .extend (
390392 cls .extract_included (
@@ -426,9 +428,10 @@ def extract_root_meta(cls, serializer, resource):
426428 return data
427429
428430 @classmethod
429- def build_json_resource_obj (cls , fields , resource , resource_instance , resource_name ):
431+ def build_json_resource_obj (cls , fields , resource , resource_instance , resource_name ,
432+ force_type_resolution = False ):
430433 # Determine type from the instance if the underlying model is polymorphic
431- if isinstance ( resource_instance , utils . POLYMORPHIC_ANCESTORS ) :
434+ if force_type_resolution :
432435 resource_name = utils .get_resource_type_from_instance (resource_instance )
433436 resource_data = [
434437 ('type' , resource_name ),
@@ -512,6 +515,9 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
512515 # Get the serializer fields
513516 fields = utils .get_serializer_fields (serializer )
514517
518+ # Determine if resource name must be resolved on each instance (polymorphic serializer)
519+ force_type_resolution = getattr (serializer , '_poly_force_type_resolution' , False )
520+
515521 # Extract root meta for any type of serializer
516522 json_api_meta .update (self .extract_root_meta (serializer , serializer_data ))
517523
@@ -523,7 +529,7 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
523529 resource_instance = serializer .instance [position ] # Get current instance
524530
525531 json_resource_obj = self .build_json_resource_obj (
526- fields , resource , resource_instance , resource_name
532+ fields , resource , resource_instance , resource_name , force_type_resolution
527533 )
528534 meta = self .extract_meta (serializer , resource )
529535 if meta :
@@ -538,7 +544,7 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
538544 else :
539545 resource_instance = serializer .instance
540546 json_api_data = self .build_json_resource_obj (
541- fields , serializer_data , resource_instance , resource_name
547+ fields , serializer_data , resource_instance , resource_name , force_type_resolution
542548 )
543549
544550 meta = self .extract_meta (serializer , serializer_data )
0 commit comments