This commit is contained in:
Johan Charpentier 2017-05-12 15:43:02 +00:00 committed by GitHub
commit eeea2c8441
2 changed files with 21 additions and 5 deletions

View File

@ -15,6 +15,7 @@ from django.http import Http404
from django.utils.encoding import force_text from django.utils.encoding import force_text
from rest_framework import exceptions, serializers from rest_framework import exceptions, serializers
from rest_framework.fields import empty
from rest_framework.request import clone_request from rest_framework.request import clone_request
from rest_framework.utils.field_mapping import ClassLookupDict from rest_framework.utils.field_mapping import ClassLookupDict
@ -123,13 +124,16 @@ class SimpleMetadata(BaseMetadata):
attrs = [ attrs = [
'read_only', 'label', 'help_text', 'read_only', 'label', 'help_text',
'min_length', 'max_length', 'min_length', 'max_length', 'default',
'min_value', 'max_value' 'min_value', 'max_value'
] ]
for attr in attrs: for attr in attrs:
value = getattr(field, attr, None) value = getattr(field, attr, None)
if value is not None and value != '': if value is not None and value != '' and value != empty:
if callable(value):
value.set_context(field)
value = value()
field_info[attr] = force_text(value, strings_only=True) field_info[attr] = force_text(value, strings_only=True)
if getattr(field, 'child', None): if getattr(field, 'child', None):

View File

@ -77,7 +77,7 @@ class TestMetadata:
min_value=1, max_value=1000 min_value=1, max_value=1000
) )
char_field = serializers.CharField( 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( list_field = serializers.ListField(
child=serializers.ListField( child=serializers.ListField(
@ -85,6 +85,7 @@ class TestMetadata:
) )
) )
nested_field = NestedField() nested_field = NestedField()
defaultuser_field = serializers.HiddenField(default=serializers.CurrentUserDefault())
class ExampleView(views.APIView): class ExampleView(views.APIView):
"""Example view.""" """Example view."""
@ -92,7 +93,10 @@ class TestMetadata:
pass pass
def get_serializer(self): def get_serializer(self):
return ExampleSerializer() if self.request:
return ExampleSerializer(context={'request': self.request})
else:
return ExampleSerializer()
view = ExampleView.as_view() view = ExampleView.as_view()
response = view(request=request) response = view(request=request)
@ -136,7 +140,8 @@ class TestMetadata:
'read_only': False, 'read_only': False,
'label': 'Char field', 'label': 'Char field',
'min_length': 3, 'min_length': 3,
'max_length': 40 'max_length': 40,
'default': 'Cookie'
}, },
'list_field': { 'list_field': {
'type': 'list', 'type': 'list',
@ -173,6 +178,13 @@ class TestMetadata:
'label': 'B' 'label': 'B'
} }
} }
},
'defaultuser_field': {
'type': 'field',
'required': False,
'read_only': False,
'label': 'Defaultuser field',
'default': 'AnonymousUser'
} }
} }
} }