mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 20:40:14 +03:00
Fix serializer default None field bug
This commit is contained in:
parent
4ad4fca6ce
commit
ffcb7881d4
|
@ -354,7 +354,14 @@ class WritableField(Field):
|
|||
else:
|
||||
native = data[field_name]
|
||||
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
|
||||
native = self.get_default_value()
|
||||
else:
|
||||
|
|
|
@ -913,6 +913,8 @@ class ReadOnlyManyToManyTests(TestCase):
|
|||
class DefaultValueTests(TestCase):
|
||||
def setUp(self):
|
||||
class DefaultValueSerializer(serializers.ModelSerializer):
|
||||
default_none_field = serializers.CharField(default=None, required=False, allow_none=True)
|
||||
|
||||
class Meta:
|
||||
model = DefaultValueModel
|
||||
|
||||
|
@ -928,6 +930,15 @@ class DefaultValueTests(TestCase):
|
|||
self.assertEqual(instance.pk, 1)
|
||||
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):
|
||||
data = {'text': 'overridden'}
|
||||
serializer = self.serializer_class(data=data)
|
||||
|
|
Loading…
Reference in New Issue
Block a user