@@ -252,8 +252,12 @@ def extract_relationships(fields, resource, resource_instance):
252252 if not isinstance (field , (RelatedField , ManyRelatedField , BaseSerializer )):
253253 continue
254254
255- relation_instance_or_manager = getattr (resource_instance , field_name )
256- relation_type = get_instance_or_manager_resource_type (relation_instance_or_manager )
255+ try :
256+ relation_instance_or_manager = getattr (resource_instance , field_name )
257+ except AttributeError : # Skip fields defined on the serializer that don't correspond to a field on the model
258+ continue
259+
260+ relation_type = get_related_resource_type (field )
257261
258262 if isinstance (field , HyperlinkedIdentityField ):
259263 # special case for HyperlinkedIdentityField
@@ -359,13 +363,13 @@ def extract_included(fields, resource, resource_instance):
359363 continue
360364
361365 relation_instance_or_manager = getattr (resource_instance , field_name )
362- relation_queryset = relation_instance_or_manager .all ()
363366 serializer_data = resource .get (field_name )
364367
365368 if isinstance (field , ListSerializer ):
366369 serializer = field .child
367370 model = serializer .Meta .model
368371 relation_type = format_relation_name (model .__name__ )
372+ relation_queryset = relation_instance_or_manager .all ()
369373
370374 # Get the serializer fields
371375 serializer_fields = get_serializer_fields (serializer )
@@ -387,7 +391,7 @@ def extract_included(fields, resource, resource_instance):
387391 serializer_fields = get_serializer_fields (field )
388392 if serializer_data :
389393 included_data .append (
390- build_json_resource_obj (serializer_fields , serializer_data , relation_queryset , relation_type )
394+ build_json_resource_obj (serializer_fields , serializer_data , relation_instance_or_manager , relation_type )
391395 )
392396
393397 return format_keys (included_data )
0 commit comments