Skip to content

Commit a507277

Browse files
craigdstomchristie
authored andcommitted
Don't show hidden fields in metadata (#5854)
HiddenField is meant to be hidden, but we discovered it showing up in OPTIONS requests
1 parent a7e2a7b commit a507277

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

rest_framework/metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ def get_serializer_info(self, serializer):
111111
return OrderedDict([
112112
(field_name, self.get_field_info(field))
113113
for field_name, field in serializer.fields.items()
114+
if not isinstance(field, serializers.HiddenField)
114115
])
115116

116117
def get_field_info(self, field):

tests/test_metadata.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,27 @@ def get_serializer(self):
275275
view = ExampleView.as_view(versioning_class=scheme)
276276
view(request=request)
277277

278+
def test_dont_show_hidden_fields(self):
279+
"""
280+
HiddenField shouldn't show up in SimpleMetadata at all.
281+
"""
282+
class ExampleSerializer(serializers.Serializer):
283+
integer_field = serializers.IntegerField(max_value=10)
284+
hidden_field = serializers.HiddenField(default=1)
285+
286+
class ExampleView(views.APIView):
287+
"""Example view."""
288+
def post(self, request):
289+
pass
290+
291+
def get_serializer(self):
292+
return ExampleSerializer()
293+
294+
view = ExampleView.as_view()
295+
response = view(request=request)
296+
assert response.status_code == status.HTTP_200_OK
297+
assert set(response.data['actions']['POST'].keys()) == {'integer_field'}
298+
278299
def test_list_serializer_metadata_returns_info_about_fields_of_child_serializer(self):
279300
class ExampleSerializer(serializers.Serializer):
280301
integer_field = serializers.IntegerField(max_value=10)

0 commit comments

Comments
 (0)