Skip to content

Commit 9567093

Browse files
author
Carlton Gibson
committed
Test and quick fix for encode#1257
1 parent ac1ea5e commit 9567093

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

rest_framework/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,7 @@ def get_validation_exclusions(self):
893893
field_name = field.source or field_name
894894
if field_name in exclusions \
895895
and not field.read_only \
896+
and field.required \
896897
and not isinstance(field, Serializer):
897898
exclusions.remove(field_name)
898899
return exclusions

rest_framework/tests/test_serializer.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ class ActionItemSerializer(serializers.ModelSerializer):
7171
class Meta:
7272
model = ActionItem
7373

74+
class ActionItemSerializerOptionalFields(serializers.ModelSerializer):
75+
"""
76+
Intended to test that fields with `required=False` are excluded from validation.
77+
"""
78+
title = serializers.CharField(required=False)
79+
80+
class Meta:
81+
model = ActionItem
82+
fields = ('title',)
7483

7584
class ActionItemSerializerCustomRestore(serializers.ModelSerializer):
7685

@@ -288,7 +297,13 @@ def test_serializer_data_is_cleared_on_save(self):
288297
serializer.save()
289298
self.assertIsNotNone(serializer.data.get('id',None), 'Model is saved. `id` should be set.')
290299

291-
300+
def test_fields_marked_as_not_required_are_excluded_from_validation(self):
301+
"""
302+
Check that fields with `required=False` are included in list of exclusions.
303+
"""
304+
serializer = ActionItemSerializerOptionalFields(self.actionitem)
305+
exclusions = serializer.get_validation_exclusions()
306+
self.assertTrue('title' in exclusions, '`title` field was marked `required=False` and should be excluded')
292307

293308

294309
class DictStyleSerializer(serializers.Serializer):
@@ -1808,14 +1823,14 @@ def test_enabled_partial(self):
18081823
self.assertEqual(serializer.data['cat'], False)
18091824
self.assertEqual(serializer.data['dog'], False)
18101825

1811-
1826+
18121827
class BoolenFieldTypeTest(TestCase):
18131828
'''
18141829
Ensure the various Boolean based model fields are rendered as the proper
18151830
field type
1816-
1831+
18171832
'''
1818-
1833+
18191834
def setUp(self):
18201835
'''
18211836
Setup an ActionItemSerializer for BooleanTesting
@@ -1831,11 +1846,11 @@ def test_booleanfield_type(self):
18311846
'''
18321847
bfield = self.serializer.get_fields()['done']
18331848
self.assertEqual(type(bfield), fields.BooleanField)
1834-
1849+
18351850
def test_nullbooleanfield_type(self):
18361851
'''
1837-
Test that BooleanField is infered from models.NullBooleanField
1838-
1852+
Test that BooleanField is infered from models.NullBooleanField
1853+
18391854
https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8
18401855
'''
18411856
bfield = self.serializer.get_fields()['started']

0 commit comments

Comments
 (0)