Skip to content

Commit 0ddd140

Browse files
committed
Removed extract_id as we now have access to the resource instance
1 parent 54bbf82 commit 0ddd140

File tree

1 file changed

+7
-18
lines changed

1 file changed

+7
-18
lines changed

rest_framework_json_api/utils.py

+7-18
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def format_value(value, format_type=None):
131131
def 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-
190182
def 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

Comments
 (0)