From fc0ec571c26c03cafc9066ae25c13b54dd18ab65 Mon Sep 17 00:00:00 2001 From: Petros Moisiadis Date: Wed, 16 Dec 2015 20:59:46 +0200 Subject: [PATCH 1/2] Include 'initial' attribute of serializer fields in metadata responses Frontend applications may now use the response of an OPTIONS request so as to populate the fields for "add/new/create" type of forms with initial values based on the 'initial' attribute of the serializer's fields. --- rest_framework/metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index 6c4f176923..5a21a0d440 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -124,7 +124,8 @@ def get_field_info(self, field): attrs = [ 'read_only', 'label', 'help_text', 'min_length', 'max_length', - 'min_value', 'max_value' + 'min_value', 'max_value', + 'initial' ] for attr in attrs: From b3abe12ef162a32d49e0d278bd0002d3ad6e1b84 Mon Sep 17 00:00:00 2001 From: Petros Moisiadis Date: Thu, 17 Dec 2015 20:27:35 +0200 Subject: [PATCH 2/2] Fixed tests after introducing 'initial' field to metadata API Also extended current test to also check against a field with its 'initial' argument set to 'initial value'. --- rest_framework/metadata.py | 2 +- tests/test_metadata.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index 5a21a0d440..518a1e4ff0 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -130,7 +130,7 @@ def get_field_info(self, field): 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 != []: 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..a5880fef13 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -69,7 +69,8 @@ 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, + initial='initial value' ) list_field = serializers.ListField( child=serializers.ListField( @@ -128,7 +129,8 @@ def get_serializer(self): 'read_only': False, 'label': 'Char field', 'min_length': 3, - 'max_length': 40 + 'max_length': 40, + 'initial': 'initial value' }, 'list_field': { 'type': 'list',