This commit is contained in:
Roger 2014-11-01 00:05:37 +00:00
commit 324435e20e
2 changed files with 19 additions and 1 deletions

View File

@ -354,7 +354,14 @@ class WritableField(Field):
else: else:
native = data[field_name] native = data[field_name]
except KeyError: except KeyError:
if self.default is not None and not self.partial: try:
allow_none = self.allow_none
except AttributeError:
allow_none = False
if (
(self.default is None and allow_none) or
(self.default is not None)
) and not self.partial:
# Note: partial updates shouldn't set defaults # Note: partial updates shouldn't set defaults
native = self.get_default_value() native = self.get_default_value()
else: else:

View File

@ -915,6 +915,8 @@ class ReadOnlyManyToManyTests(TestCase):
class DefaultValueTests(TestCase): class DefaultValueTests(TestCase):
def setUp(self): def setUp(self):
class DefaultValueSerializer(serializers.ModelSerializer): class DefaultValueSerializer(serializers.ModelSerializer):
default_none_field = serializers.CharField(default=None, required=False, allow_none=True)
class Meta: class Meta:
model = DefaultValueModel model = DefaultValueModel
@ -930,6 +932,15 @@ class DefaultValueTests(TestCase):
self.assertEqual(instance.pk, 1) self.assertEqual(instance.pk, 1)
self.assertEqual(instance.text, 'foobar') self.assertEqual(instance.text, 'foobar')
def test_create_using_none_as_default(self):
data = {}
serializer = self.serializer_class(data=data)
self.assertEqual(serializer.is_valid(), True)
instance = serializer.save()
self.assertEqual(len(self.objects.all()), 1)
self.assertEqual(instance.pk, 1)
self.assertEqual(instance.default_none_field, None)
def test_create_overriding_default(self): def test_create_overriding_default(self):
data = {'text': 'overridden'} data = {'text': 'overridden'}
serializer = self.serializer_class(data=data) serializer = self.serializer_class(data=data)