Skip to content

Commit eeab460

Browse files
committed
Feature to format the relation names
Implemented a new option to be able to format the key names in relations.
1 parent d997b0b commit eeab460

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

rest_framework_json_api/utils.py

+19-5
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,20 @@ def format_value(value, format_type=None):
128128
return value
129129

130130

131+
def format_relation_name(value, format_type=None):
132+
format_type = getattr(settings, 'JSON_API_FORMAT_RELATION_KEYS', False)
133+
134+
value = inflection.underscore(value)
135+
136+
if format_type == 'dasherize':
137+
value = inflection.dasherize(value)
138+
elif format_type == 'camelize':
139+
value = inflection.camelize(value)
140+
elif format_type == 'underscore':
141+
value = inflection.underscore(value)
142+
return value
143+
144+
131145
def build_json_resource_obj(fields, resource, resource_instance, resource_name):
132146
resource_data = [
133147
('type', resource_name),
@@ -168,7 +182,7 @@ def get_related_resource_type(relation):
168182
relation_model = parent_model_relation.field.related.model
169183
else:
170184
raise APIException('Unable to find related model for relation {relation}'.format(relation=relation))
171-
return inflection.pluralize(relation_model.__name__).lower()
185+
return inflection.pluralize(format_relation_name(relation_model.__name__))
172186

173187

174188
def extract_id_from_url(url):
@@ -280,7 +294,7 @@ def extract_relationships(fields, resource, resource_instance):
280294

281295
serializer = field.child
282296
relation_model = serializer.Meta.model
283-
relation_type = inflection.pluralize(relation_model.__name__).lower()
297+
relation_type = inflection.pluralize(format_relation_name(relation_model.__name__))
284298

285299
# Get the serializer fields
286300
serializer_fields = get_serializer_fields(serializer)
@@ -297,7 +311,7 @@ def extract_relationships(fields, resource, resource_instance):
297311

298312
if isinstance(field, ModelSerializer):
299313
relation_model = field.Meta.model
300-
relation_type = inflection.pluralize(relation_model.__name__).lower()
314+
relation_type = inflection.pluralize(format_relation_name(relation_model.__name__))
301315

302316
# Get the serializer fields
303317
serializer_fields = get_serializer_fields(field)
@@ -331,7 +345,7 @@ def extract_included(fields, resource, resource_instance):
331345

332346
serializer = field.child
333347
model = serializer.Meta.model
334-
relation_type = inflection.pluralize(model.__name__).lower()
348+
relation_type = inflection.pluralize(format_relation_name(model.__name__))
335349

336350
# Get the serializer fields
337351
serializer_fields = get_serializer_fields(serializer)
@@ -350,7 +364,7 @@ def extract_included(fields, resource, resource_instance):
350364
if isinstance(field, ModelSerializer):
351365

352366
model = field.Meta.model
353-
relation_type = inflection.pluralize(model.__name__).lower()
367+
relation_type = inflection.pluralize(format_relation_name(model.__name__))
354368

355369
# Get the serializer fields
356370
serializer_fields = get_serializer_fields(field)

0 commit comments

Comments
 (0)