aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2014-01-15 08:53:23 +0000
committerTom Christie2014-01-15 08:53:23 +0000
commite9fda70b4ac86badbd5297f857126121472b7ec6 (patch)
tree161891750090c216d2d1c16dc0dc3b9a649f8220
parent9d6129a95f896f5bc0c81800e01f136d59eb60cb (diff)
downloaddjango-rest-framework-e9fda70b4ac86badbd5297f857126121472b7ec6.tar.bz2
Nicer write_only fields implementation. Closes #1355
-rw-r--r--rest_framework/fields.py6
-rw-r--r--rest_framework/serializers.py10
2 files changed, 5 insertions, 11 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 258c0f6a..2f475d6e 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -114,10 +114,6 @@ def strip_multiple_choice_msg(help_text):
return help_text.replace(multiple_choice_msg, '')
-class IgnoreFieldException(Exception):
- pass
-
-
class Field(object):
read_only = True
creation_counter = 0
@@ -329,7 +325,7 @@ class WritableField(Field):
def field_to_native(self, obj, field_name):
if self.write_only:
- raise IgnoreFieldException()
+ return None
return super(WritableField, self).field_to_native(obj, field_name)
def field_from_native(self, data, files, field_name, into):
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 414a769f..536b040b 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -346,14 +346,12 @@ class BaseSerializer(WritableField):
continue
field.initialize(parent=self, field_name=field_name)
key = self.get_field_key(field_name)
- try:
- value = field.field_to_native(obj, field_name)
- except IgnoreFieldException:
- continue
+ value = field.field_to_native(obj, field_name)
method = getattr(self, 'transform_%s' % field_name, None)
if callable(method):
value = method(obj, value)
- ret[key] = value
+ if not getattr(field, 'write_only', False):
+ ret[key] = value
ret.fields[key] = self.augment_field(field, field_name, key, value)
return ret
@@ -389,7 +387,7 @@ class BaseSerializer(WritableField):
across relationships.
"""
if self.write_only:
- raise IgnoreFieldException()
+ return None
if self.source == '*':
return self.to_native(obj)