From 4c3071b97f4feb0de8082489deb91c164124d0a6 Mon Sep 17 00:00:00 2001 From: Johan Charpentier Date: Thu, 24 Dec 2015 12:56:58 +0100 Subject: [PATCH 1/3] Add 'default' value in metadatas --- rest_framework/metadata.py | 5 +++-- tests/test_metadata.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index 6c4f176923..f20d4c81be 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -15,6 +15,7 @@ from django.utils.encoding import force_text from rest_framework import exceptions, serializers +from rest_framework.fields import empty from rest_framework.request import clone_request from rest_framework.utils.field_mapping import ClassLookupDict @@ -123,13 +124,13 @@ def get_field_info(self, field): attrs = [ 'read_only', 'label', 'help_text', - 'min_length', 'max_length', + 'min_length', 'max_length', 'default', 'min_value', 'max_value' ] for attr in attrs: value = getattr(field, attr, None) - if value is not None and value != '': + if value is not None and value != '' and value != empty: 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 6819f15046..1529fd583b 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -69,7 +69,7 @@ class ExampleSerializer(serializers.Serializer): min_value=1, max_value=1000 ) char_field = serializers.CharField( - required=False, min_length=3, max_length=40 + required=False, min_length=3, max_length=40, default='Cookie' ) list_field = serializers.ListField( child=serializers.ListField( @@ -128,7 +128,8 @@ def get_serializer(self): 'read_only': False, 'label': 'Char field', 'min_length': 3, - 'max_length': 40 + 'max_length': 40, + 'default': 'Cookie' }, 'list_field': { 'type': 'list', From bfcbe258abf5dc54fcd7372cb16b6bb434c821b3 Mon Sep 17 00:00:00 2001 From: Johan Charpentier Date: Thu, 24 Dec 2015 15:23:31 +0100 Subject: [PATCH 2/3] Add `CurrentUserDefault` case --- rest_framework/metadata.py | 3 +++ tests/test_metadata.py | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index f20d4c81be..55afcb7dcb 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -131,6 +131,9 @@ def get_field_info(self, field): 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 1529fd583b..f820d7ea86 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -77,6 +77,7 @@ class ExampleSerializer(serializers.Serializer): ) ) nested_field = NestedField() + defaultuser_field = serializers.HiddenField(default=serializers.CurrentUserDefault()) class ExampleView(views.APIView): """Example view.""" @@ -84,7 +85,10 @@ def post(self, request): 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 @@ def get_serializer(self): 'label': 'B' } } + }, + 'defaultuser_field': { + 'type': 'field', + 'required': False, + 'read_only': False, + 'label': 'Defaultuser field', + 'default': 'AnonymousUser' } } } From 8641cd68bb5e3a189568a814cd8094c3b6001616 Mon Sep 17 00:00:00 2001 From: Johan Charpentier Date: Thu, 24 Dec 2015 15:27:02 +0100 Subject: [PATCH 3/3] Stick to coding style --- rest_framework/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index 55afcb7dcb..2d99f61cbd 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -131,7 +131,7 @@ def get_field_info(self, field): for attr in attrs: value = getattr(field, attr, None) if value is not None and value != '' and value != empty: - if hasattr(value, '__call__'): + if callable(value): value.set_context(field) value = value() field_info[attr] = force_text(value, strings_only=True)