aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2013-08-30 09:02:54 +0100
committerTom Christie2013-08-30 09:02:54 +0100
commit3fba60e99c75dda4e14f7fe4f941d6fc84e4c986 (patch)
tree62c33389ebb77a71b931ad72d702ba0096fe00fa
parent2247fd68e9b3bbc91075a11f44db16fc40497b2a (diff)
downloaddjango-rest-framework-3fba60e99c75dda4e14f7fe4f941d6fc84e4c986.tar.bz2
Drop broken placeholder serializations.
-rw-r--r--rest_framework/renderers.py13
-rw-r--r--rest_framework/serializers.py3
-rw-r--r--rest_framework/tests/test_serializer.py1
3 files changed, 12 insertions, 5 deletions
diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py
index 525e44d5..fca67eee 100644
--- a/rest_framework/renderers.py
+++ b/rest_framework/renderers.py
@@ -338,6 +338,11 @@ class HTMLFormRenderer(BaseRenderer):
fields = {}
for key, val in data.fields.items():
if getattr(val, 'read_only', True):
+ # Don't include read-only fields.
+ continue
+
+ if getattr(val, 'fields', None):
+ # Nested data not supported by HTML forms.
continue
kwargs = {}
@@ -476,6 +481,7 @@ class BrowsableAPIRenderer(BaseRenderer):
return
serializer = view.get_serializer(instance=obj)
+
data = serializer.data
form_renderer = self.form_renderer_class()
return form_renderer.render(data, self.accepted_media_type, self.renderer_context)
@@ -508,9 +514,10 @@ class BrowsableAPIRenderer(BaseRenderer):
# Get a read-only version of the serializer
serializer = view.get_serializer(instance=obj)
- for field_name, field in serializer.fields.items():
- if field.read_only:
- del serializer.fields[field_name]
+ if obj is None:
+ for name, field in serializer.fields.items():
+ if getattr(field, 'read_only', None):
+ del serializer.fields[name]
# Render the raw data content
renderer = renderer_class()
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index abff6898..a63c7f6c 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -334,13 +334,14 @@ class BaseSerializer(WritableField):
if self.source == '*':
return self.to_native(obj)
+ # Get the raw field value
try:
source = self.source or field_name
value = obj
for component in source.split('.'):
if value is None:
- return self.to_native(None)
+ break
value = get_component(value, component)
except ObjectDoesNotExist:
return None
diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py
index c2497660..957e3bd2 100644
--- a/rest_framework/tests/test_serializer.py
+++ b/rest_framework/tests/test_serializer.py
@@ -158,7 +158,6 @@ class BasicTests(TestCase):
'email': '',
'content': '',
'created': None,
- 'sub_comment': ''
}
self.assertEqual(serializer.data, expected)