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 | |
| 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
| -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): |
