diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 53bbb1390..fecdf9239 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -319,9 +319,6 @@ class HTMLFormRenderer(BaseRenderer): style['template_pack'] = parent_style.get('template_pack', self.template_pack) style['renderer'] = self - # Get a clone of the field with text-only value representation. - field = field.as_form_field() - if style.get('input_type') == 'datetime-local' and isinstance(field.value, six.text_type): field.value = field.value.rstrip('Z') diff --git a/rest_framework/templates/rest_framework/horizontal/input.html b/rest_framework/templates/rest_framework/horizontal/input.html index 82e6dc67c..40ab56a09 100644 --- a/rest_framework/templates/rest_framework/horizontal/input.html +++ b/rest_framework/templates/rest_framework/horizontal/input.html @@ -6,7 +6,7 @@ {% endif %}
- + {% if field.errors %} {% for error in field.errors %} diff --git a/rest_framework/templates/rest_framework/horizontal/select.html b/rest_framework/templates/rest_framework/horizontal/select.html index 1ea5c16e2..dc61d6af4 100644 --- a/rest_framework/templates/rest_framework/horizontal/select.html +++ b/rest_framework/templates/rest_framework/horizontal/select.html @@ -8,7 +8,7 @@
+ {% if field.errors %} {% for error in field.errors %} diff --git a/rest_framework/templates/rest_framework/inline/input.html b/rest_framework/templates/rest_framework/inline/input.html index f28e8f11c..c749ae055 100644 --- a/rest_framework/templates/rest_framework/inline/input.html +++ b/rest_framework/templates/rest_framework/inline/input.html @@ -5,5 +5,5 @@ {% endif %} - +
diff --git a/rest_framework/templates/rest_framework/inline/select.html b/rest_framework/templates/rest_framework/inline/select.html index 99f10ae71..f4dae58cd 100644 --- a/rest_framework/templates/rest_framework/inline/select.html +++ b/rest_framework/templates/rest_framework/inline/select.html @@ -7,7 +7,7 @@ +
diff --git a/rest_framework/templates/rest_framework/vertical/input.html b/rest_framework/templates/rest_framework/vertical/input.html index 71e132fe9..e4739e7d7 100644 --- a/rest_framework/templates/rest_framework/vertical/input.html +++ b/rest_framework/templates/rest_framework/vertical/input.html @@ -3,7 +3,7 @@ {% endif %} - + {% if field.errors %} {% for error in field.errors %} diff --git a/rest_framework/templates/rest_framework/vertical/select.html b/rest_framework/templates/rest_framework/vertical/select.html index 973efb679..eb6d59489 100644 --- a/rest_framework/templates/rest_framework/vertical/select.html +++ b/rest_framework/templates/rest_framework/vertical/select.html @@ -7,7 +7,7 @@ + {% if field.errors %} {% for error in field.errors %}{{ error }}{% endfor %} diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index cfaeb25e8..fcac99b50 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -72,15 +72,17 @@ class BoundField(object): def _proxy_class(self): return self._field.__class__ + @property + def string_value(self): + if self.value is None or self.value is False: + return '' + return force_text(self.value) + def __repr__(self): return unicode_to_repr('<%s value=%s errors=%s>' % ( self.__class__.__name__, self.value, self.errors )) - def as_form_field(self): - value = '' if (self.value is None or self.value is False) else force_text(self.value) - return self.__class__(self._field, value, self.errors, self._prefix) - class NestedBoundField(BoundField): """ @@ -106,15 +108,6 @@ class NestedBoundField(BoundField): return NestedBoundField(field, value, error, prefix=self.name + '.') return BoundField(field, value, error, prefix=self.name + '.') - def as_form_field(self): - values = {} - for key, value in self.value.items(): - if isinstance(value, (list, dict)): - values[key] = value - else: - values[key] = '' if (value is None or value is False) else force_text(value) - return self.__class__(self._field, values, self.errors, self._prefix) - class BindingDict(collections.MutableMapping): """ diff --git a/tests/test_bound_fields.py b/tests/test_bound_fields.py index f2fac8f0d..4aff741ce 100644 --- a/tests/test_bound_fields.py +++ b/tests/test_bound_fields.py @@ -45,15 +45,15 @@ class TestSimpleBoundField: assert serializer['amount'].errors is None assert serializer['amount'].name == 'amount' - def test_as_form_fields(self): + def test_string_value(self): class ExampleSerializer(serializers.Serializer): bool_field = serializers.BooleanField() null_field = serializers.IntegerField(allow_null=True) serializer = ExampleSerializer(data={'bool_field': False, 'null_field': None}) assert serializer.is_valid() - assert serializer['bool_field'].as_form_field().value == '' - assert serializer['null_field'].as_form_field().value == '' + assert serializer['bool_field'].string_value == '' + assert serializer['null_field'].string_value == '' class TestNestedBoundField: @@ -78,7 +78,7 @@ class TestNestedBoundField: assert serializer['nested']['amount'].errors is None assert serializer['nested']['amount'].name == 'nested.amount' - def test_as_form_fields(self): + def test_string_value(self): class Nested(serializers.Serializer): bool_field = serializers.BooleanField() null_field = serializers.IntegerField(allow_null=True) @@ -88,8 +88,8 @@ class TestNestedBoundField: serializer = ExampleSerializer(data={'nested': {'bool_field': False, 'null_field': None}}) assert serializer.is_valid() - assert serializer['nested']['bool_field'].as_form_field().value == '' - assert serializer['nested']['null_field'].as_form_field().value == '' + assert serializer['nested']['bool_field'].string_value == '' + assert serializer['nested']['null_field'].string_value == '' def test_rendering_nested_fields_with_none_value(self): from rest_framework.renderers import HTMLFormRenderer