diff options
| author | Tom Christie | 2013-10-17 07:31:15 -0700 | 
|---|---|---|
| committer | Tom Christie | 2013-10-17 07:31:15 -0700 | 
| commit | 6a40202a644055808bde355471b1400264d0dada (patch) | |
| tree | c091c65b5ed89859099134a72558872bea9c128d /rest_framework | |
| parent | 8c60471766169eb0b8ca8dddd5bad2156504e749 (diff) | |
| parent | c6be12f02b5e07e412c8c91b368566a85364b907 (diff) | |
| download | django-rest-framework-6a40202a644055808bde355471b1400264d0dada.tar.bz2 | |
Merge pull request #1112 from tamakisquare/issue-1111
Test case and fix for issue 1111
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 5 | ||||
| -rw-r--r-- | rest_framework/tests/test_serializer.py | 27 | 
2 files changed, 31 insertions, 1 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 6801e24d..05c9eb47 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -262,10 +262,13 @@ class BaseSerializer(WritableField):          for field_name, field in self.fields.items():              if field_name in self._errors:                  continue + +            source = field.source or field_name +            if self.partial and source not in attrs: +                continue              try:                  validate_method = getattr(self, 'validate_%s' % field_name, None)                  if validate_method: -                    source = field.source or field_name                      attrs = validate_method(attrs, source)              except ValidationError as err:                  self._errors[field_name] = self._errors.get(field_name, []) + list(err.messages) diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 29c08fbc..1f85a474 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -511,6 +511,33 @@ class CustomValidationTests(TestCase):          self.assertFalse(serializer.is_valid())          self.assertEqual(serializer.errors, {'email': ['Enter a valid email address.']}) +    def test_partial_update(self): +        """ +        Make sure that validate_email isn't called when partial=True and email +        isn't found in data. +        """ +        initial_data = { +            'email': 'tom@example.com', +            'content': 'A test comment', +            'created': datetime.datetime(2012, 1, 1) +        } + +        serializer = self.CommentSerializerWithFieldValidator(data=initial_data) +        self.assertEqual(serializer.is_valid(), True) +        instance = serializer.object + +        new_content = 'An *updated* test comment' +        partial_data = { +            'content': new_content +        } + +        serializer = self.CommentSerializerWithFieldValidator(instance=instance, +                                                              data=partial_data, +                                                              partial=True) +        self.assertEqual(serializer.is_valid(), True) +        instance = serializer.object +        self.assertEqual(instance.content, new_content) +  class PositiveIntegerAsChoiceTests(TestCase):      def test_positive_integer_in_json_is_correctly_parsed(self):  | 
