@@ -131,7 +131,7 @@ def format_value(value, format_type=None):
131
131
def build_json_resource_obj (fields , resource , resource_instance , resource_name ):
132
132
resource_data = [
133
133
('type' , resource_name ),
134
- ('id' , extract_id ( fields , resource ) ),
134
+ ('id' , resource_instance . pk ),
135
135
('attributes' , extract_attributes (fields , resource )),
136
136
]
137
137
relationships = extract_relationships (fields , resource , resource_instance )
@@ -179,18 +179,10 @@ def extract_id_from_url(url):
179
179
return encoding .force_text (match .kwargs ['pk' ])
180
180
181
181
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
-
190
182
def extract_attributes (fields , resource ):
191
183
data = OrderedDict ()
192
184
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
194
186
if field_name == 'id' :
195
187
continue
196
188
# Skip fields with relations
@@ -282,14 +274,14 @@ def extract_relationships(fields, resource, resource_instance):
282
274
relation_model = serializer .Meta .model
283
275
relation_type = inflection .pluralize (relation_model .__name__ ).lower ()
284
276
285
- # Get the serializer fields
286
- serializer_fields = get_serializer_fields (serializer )
287
277
serializer_data = resource .get (field_name )
288
278
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 ]
290
282
relation_data .append (
291
283
OrderedDict ([
292
- ('type' , relation_type ), ('id' , extract_id ( serializer_fields , serializer_resource ) )
284
+ ('type' , relation_type ), ('id' , nested_resource_instance . pk )
293
285
]))
294
286
295
287
data .update ({field_name : {'data' : relation_data }})
@@ -299,15 +291,12 @@ def extract_relationships(fields, resource, resource_instance):
299
291
relation_model = field .Meta .model
300
292
relation_type = inflection .pluralize (relation_model .__name__ ).lower ()
301
293
302
- # Get the serializer fields
303
- serializer_fields = get_serializer_fields (field )
304
- serializer_data = resource .get (field_name )
305
294
data .update ({
306
295
field_name : {
307
296
'data' : (
308
297
OrderedDict ([
309
298
('type' , relation_type ),
310
- ('id' , extract_id ( serializer_fields , serializer_data ) )
299
+ ('id' , getattr ( resource_instance , field_name ). pk )
311
300
]) if resource .get (field_name ) else None )
312
301
}
313
302
})
0 commit comments