@@ -223,7 +223,9 @@ def extract_relationships(fields, resource, resource_instance):
223223 # special case for HyperlinkedIdentityField
224224 relation_data = list ()
225225 relation_type = get_related_resource_type (field )
226- related = getattr (resource_instance , field_name ).all ()
226+ relation_manager = getattr (resource_instance , field_name )
227+ # Don't try to query an empty relation
228+ related = relation_manager .all () if relation_manager is not None else list ()
227229 for relation in related :
228230 relation_data .append (OrderedDict ([('type' , relation_type ), ('id' , relation .pk )]))
229231
@@ -314,7 +316,7 @@ def extract_relationships(fields, resource, resource_instance):
314316 return format_keys (data )
315317
316318
317- def extract_included (fields , resource ):
319+ def extract_included (fields , resource , resource_instance ):
318320 included_data = list ()
319321 for field_name , field in six .iteritems (fields ):
320322 # Skip URL field
@@ -335,8 +337,15 @@ def extract_included(fields, resource):
335337 serializer_fields = get_serializer_fields (serializer )
336338 serializer_data = resource .get (field_name )
337339 if isinstance (serializer_data , list ):
338- for serializer_resource in serializer_data :
339- included_data .append (build_json_resource_obj (serializer_fields , serializer_resource , relation_type ))
340+ for position in range (len (serializer_data )):
341+ serializer_resource = serializer_data [position ]
342+ resource_instance_manager = getattr (resource_instance , field_name ).all ()
343+ nested_resource_instance = resource_instance_manager [position ]
344+ included_data .append (
345+ build_json_resource_obj (
346+ serializer_fields , serializer_resource , nested_resource_instance , relation_type
347+ )
348+ )
340349
341350 if isinstance (field , ModelSerializer ):
342351
@@ -346,7 +355,10 @@ def extract_included(fields, resource):
346355 # Get the serializer fields
347356 serializer_fields = get_serializer_fields (field )
348357 serializer_data = resource .get (field_name )
358+ nested_resource_instance = getattr (resource_instance , field_name ).all ()
349359 if serializer_data :
350- included_data .append (build_json_resource_obj (serializer_fields , serializer_data , relation_type ))
360+ included_data .append (
361+ build_json_resource_obj (serializer_fields , serializer_data , nested_resource_instance , relation_type )
362+ )
351363
352364 return format_keys (included_data )
0 commit comments