Skip to content

Commit b99bfe4

Browse files
authored
Format field names correctly for metadata in OPTIONS requests (#713)
Take into account settings JSON_API_FORMAT_FIELD_NAMES
1 parent b3cacb7 commit b99bfe4

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ This release is not backwards compatible. For easy migration best upgrade first
3535

3636
* Avoid printing invalid pointer when api returns 404
3737
* Avoid exception when using `ResourceIdentifierObjectSerializer` with unexisting primary key
38+
* Format metadata field names correctly for OPTIONS request
3839

3940

4041
## [2.8.0] - 2019-06-13

example/tests/test_format_keys.py

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.contrib.auth import get_user_model
22
from django.urls import reverse
33
from django.utils import encoding
4+
from rest_framework import status
45

56
from example.tests import TestBase
67

@@ -51,3 +52,11 @@ def test_camelization(self):
5152
}
5253

5354
assert expected == response.json()
55+
56+
57+
def test_options_format_field_names(db, client):
58+
response = client.options(reverse('author-list'))
59+
assert response.status_code == status.HTTP_200_OK
60+
data = response.json()['data']
61+
expected_keys = {'name', 'email', 'bio', 'entries', 'firstEntry', 'type', 'comments'}
62+
assert expected_keys == data['actions']['POST'].keys()

rest_framework_json_api/metadata.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from rest_framework.settings import api_settings
88
from rest_framework.utils.field_mapping import ClassLookupDict
99

10-
from rest_framework_json_api.utils import get_related_resource_type
10+
from rest_framework_json_api.utils import format_value, get_related_resource_type
1111

1212

1313
class JSONAPIMetadata(SimpleMetadata):
@@ -83,7 +83,7 @@ def get_serializer_info(self, serializer):
8383
serializer.fields.pop(api_settings.URL_FIELD_NAME, None)
8484

8585
return OrderedDict([
86-
(field_name, self.get_field_info(field))
86+
(format_value(field_name), self.get_field_info(field))
8787
for field_name, field in serializer.fields.items()
8888
])
8989

0 commit comments

Comments
 (0)