diff options
| author | Tom Christie | 2014-01-14 11:25:44 +0000 | 
|---|---|---|
| committer | Tom Christie | 2014-01-14 11:25:44 +0000 | 
| commit | 85d74fc86a934309359a437dd487193013055977 (patch) | |
| tree | 6c7ab1a100f61c7102d728ac6cd7dd788ed739fd /rest_framework/fields.py | |
| parent | bc6c5df109a35bf76be662a47d9c88a2a3b82351 (diff) | |
| download | django-rest-framework-85d74fc86a934309359a437dd487193013055977.tar.bz2 | |
Added write_only and write_only_fields.  Refs #1306
Diffstat (limited to 'rest_framework/fields.py')
| -rw-r--r-- | rest_framework/fields.py | 16 | 
1 files changed, 15 insertions, 1 deletions
| diff --git a/rest_framework/fields.py b/rest_framework/fields.py index f1de447c..258c0f6a 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -114,6 +114,10 @@ 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 @@ -246,6 +250,7 @@ class WritableField(Field):      """      Base for read/write fields.      """ +    write_only = False      default_validators = []      default_error_messages = {          'required': _('This field is required.'), @@ -255,7 +260,7 @@ class WritableField(Field):      default = None      def __init__(self, source=None, label=None, help_text=None, -                 read_only=False, required=None, +                 read_only=False, write_only=False, required=None,                   validators=[], error_messages=None, widget=None,                   default=None, blank=None): @@ -269,6 +274,10 @@ class WritableField(Field):          super(WritableField, self).__init__(source=source, label=label, help_text=help_text)          self.read_only = read_only +        self.write_only = write_only + +        assert not (read_only and write_only), "Cannot set read_only=True and write_only=True" +          if required is None:              self.required = not(read_only)          else: @@ -318,6 +327,11 @@ class WritableField(Field):          if errors:              raise ValidationError(errors) +    def field_to_native(self, obj, field_name): +        if self.write_only: +            raise IgnoreFieldException() +        return super(WritableField, self).field_to_native(obj, field_name) +      def field_from_native(self, data, files, field_name, into):          """          Given a dictionary and a field name, updates the dictionary `into`, | 
