@@ -131,7 +131,7 @@ def format_value(value, format_type=None):
131131def build_json_resource_obj (fields , resource , resource_instance , resource_name ):
132132 resource_data = [
133133 ('type' , resource_name ),
134- ('id' , extract_id ( fields , resource ) ),
134+ ('id' , resource_instance . pk ),
135135 ('attributes' , extract_attributes (fields , resource )),
136136 ]
137137 relationships = extract_relationships (fields , resource , resource_instance )
@@ -179,18 +179,10 @@ def extract_id_from_url(url):
179179 return encoding .force_text (match .kwargs ['pk' ])
180180
181181
182- def extract_id (fields , resource ):
183- for field_name , field in six .iteritems (fields ):
184- if field_name == 'id' :
185- return encoding .force_text (resource .get (field_name ))
186- if field_name == api_settings .URL_FIELD_NAME :
187- return extract_id_from_url (resource .get (field_name ))
188-
189-
190182def extract_attributes (fields , resource ):
191183 data = OrderedDict ()
192184 for field_name , field in six .iteritems (fields ):
193- # ID is always provided in the root of JSON API so remove it from attrs
185+ # ID is always provided in the root of JSON API so remove it from attributes
194186 if field_name == 'id' :
195187 continue
196188 # Skip fields with relations
@@ -282,14 +274,14 @@ def extract_relationships(fields, resource, resource_instance):
282274 relation_model = serializer .Meta .model
283275 relation_type = inflection .pluralize (relation_model .__name__ ).lower ()
284276
285- # Get the serializer fields
286- serializer_fields = get_serializer_fields (serializer )
287277 serializer_data = resource .get (field_name )
288278 if isinstance (serializer_data , list ):
289- for serializer_resource in serializer_data :
279+ for position in range (len (serializer_data )):
280+ resource_instance_manager = getattr (resource_instance , field_name ).all ()
281+ nested_resource_instance = resource_instance_manager [position ]
290282 relation_data .append (
291283 OrderedDict ([
292- ('type' , relation_type ), ('id' , extract_id ( serializer_fields , serializer_resource ) )
284+ ('type' , relation_type ), ('id' , nested_resource_instance . pk )
293285 ]))
294286
295287 data .update ({field_name : {'data' : relation_data }})
@@ -299,15 +291,12 @@ def extract_relationships(fields, resource, resource_instance):
299291 relation_model = field .Meta .model
300292 relation_type = inflection .pluralize (relation_model .__name__ ).lower ()
301293
302- # Get the serializer fields
303- serializer_fields = get_serializer_fields (field )
304- serializer_data = resource .get (field_name )
305294 data .update ({
306295 field_name : {
307296 'data' : (
308297 OrderedDict ([
309298 ('type' , relation_type ),
310- ('id' , extract_id ( serializer_fields , serializer_data ) )
299+ ('id' , getattr ( resource_instance , field_name ). pk )
311300 ]) if resource .get (field_name ) else None )
312301 }
313302 })
0 commit comments