mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 04:50:12 +03:00
Merge ffcb7881d4
into 65a0d083d6
This commit is contained in:
commit
324435e20e
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user