diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index f20d4c81b..55afcb7dc 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -131,6 +131,9 @@ class SimpleMetadata(BaseMetadata): for attr in attrs: value = getattr(field, attr, None) if value is not None and value != '' and value != empty: + if hasattr(value, '__call__'): + value.set_context(field) + value = value() field_info[attr] = force_text(value, strings_only=True) if getattr(field, 'child', None): diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 1529fd583..f820d7ea8 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -77,6 +77,7 @@ class TestMetadata: ) ) nested_field = NestedField() + defaultuser_field = serializers.HiddenField(default=serializers.CurrentUserDefault()) class ExampleView(views.APIView): """Example view.""" @@ -84,7 +85,10 @@ class TestMetadata: pass def get_serializer(self): - return ExampleSerializer() + if self.request: + return ExampleSerializer(context={'request': self.request}) + else: + return ExampleSerializer() view = ExampleView.as_view() response = view(request=request) @@ -166,6 +170,13 @@ class TestMetadata: 'label': 'B' } } + }, + 'defaultuser_field': { + 'type': 'field', + 'required': False, + 'read_only': False, + 'label': 'Defaultuser field', + 'default': 'AnonymousUser' } } }