From 033acfce881d19f3aafe65cafc7de0018d11f04b Mon Sep 17 00:00:00 2001 From: Johannes Spielmann Date: Mon, 28 Jan 2013 10:50:18 +0100 Subject: [PATCH] overriding restore_object on a ModelSerializer causes the validation for model fields to be skipped --- rest_framework/tests/serializer.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index bd96ba23e..800496f2e 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -54,6 +54,19 @@ class ActionItemSerializer(serializers.ModelSerializer): model = ActionItem +class ActionItemUpdateSerializer(serializers.ModelSerializer): + + def restore_object(self, data, instance=None): + if instance is None: + return ActionItem(**data) + for key, val in data.items(): + setattr(instance, key, val) + return instance + + class Meta: + model = ActionItem + + class PersonSerializer(serializers.ModelSerializer): info = serializers.Field(source='info') @@ -300,6 +313,15 @@ class ValidationTests(TestCase): self.assertEquals(serializer.is_valid(), False) self.assertEquals(serializer.errors, {'title': [u'Ensure this value has at most 200 characters (it has 201).']}) + def test_modelserializer_update_max_length_exceeded(self): + data = { + 'title': 'x' * 201, + } + serializer = ActionItemUpdateSerializer(data=data) + self.assertEquals(serializer.is_valid(), False) + self.assertEquals(serializer.errors, {'title': [u'Ensure this value has at most 200 characters (it has 201).']}) + + def test_default_modelfield_max_length_exceeded(self): data = { 'title': 'Testing "info" field...',