diff options
| author | Carlton Gibson | 2014-02-11 14:44:56 +0100 | 
|---|---|---|
| committer | Carlton Gibson | 2014-02-11 14:44:56 +0100 | 
| commit | 95670933d7954a99e02f0e19f285d8740ab5e449 (patch) | |
| tree | dcfabbba75582805db3961155fd1832bd41b953d | |
| parent | ac1ea5e65173357790cca2b2a839e3a7e33b1a40 (diff) | |
| download | django-rest-framework-95670933d7954a99e02f0e19f285d8740ab5e449.tar.bz2 | |
Test and quick fix for #1257
| -rw-r--r-- | rest_framework/serializers.py | 1 | ||||
| -rw-r--r-- | rest_framework/tests/test_serializer.py | 29 | 
2 files changed, 23 insertions, 7 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 38b5089a..10256d47 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -893,6 +893,7 @@ class ModelSerializer(Serializer):              field_name = field.source or field_name              if field_name in exclusions \                  and not field.read_only \ +                and field.required \                  and not isinstance(field, Serializer):                  exclusions.remove(field_name)          return exclusions diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 75d6e785..6b1e333e 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -71,6 +71,15 @@ class ActionItemSerializer(serializers.ModelSerializer):      class Meta:          model = ActionItem +class ActionItemSerializerOptionalFields(serializers.ModelSerializer): +    """ +    Intended to test that fields with `required=False` are excluded from validation. +    """ +    title = serializers.CharField(required=False) + +    class Meta: +        model = ActionItem +        fields = ('title',)  class ActionItemSerializerCustomRestore(serializers.ModelSerializer): @@ -288,7 +297,13 @@ class BasicTests(TestCase):          serializer.save()          self.assertIsNotNone(serializer.data.get('id',None), 'Model is saved. `id` should be set.') - +    def test_fields_marked_as_not_required_are_excluded_from_validation(self): +        """ +        Check that fields with `required=False` are included in list of exclusions. +        """ +        serializer = ActionItemSerializerOptionalFields(self.actionitem) +        exclusions = serializer.get_validation_exclusions() +        self.assertTrue('title' in exclusions, '`title` field was marked `required=False` and should be excluded')  class DictStyleSerializer(serializers.Serializer): @@ -1808,14 +1823,14 @@ class SerializerDefaultTrueBoolean(TestCase):          self.assertEqual(serializer.data['cat'], False)          self.assertEqual(serializer.data['dog'], False) -         +  class BoolenFieldTypeTest(TestCase):      '''      Ensure the various Boolean based model fields are rendered as the proper      field type -     +      ''' -     +      def setUp(self):          '''          Setup an ActionItemSerializer for BooleanTesting @@ -1831,11 +1846,11 @@ class BoolenFieldTypeTest(TestCase):          '''          bfield = self.serializer.get_fields()['done']          self.assertEqual(type(bfield), fields.BooleanField) -     +      def test_nullbooleanfield_type(self):          ''' -        Test that BooleanField is infered from models.NullBooleanField  -         +        Test that BooleanField is infered from models.NullBooleanField +          https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8          '''          bfield = self.serializer.get_fields()['started']  | 
