diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 6c07dbb3b..c4667d6ce 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -185,6 +185,9 @@ class Field(object): Given and object and a field name, returns the value that should be serialized for that field. """ + if obj is None and self.default is not None: + return self.default + if obj is None: return self.empty diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 1f85a4749..1d621aa2f 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1720,3 +1720,36 @@ class TestSerializerTransformMethods(TestCase): 'b_renamed': None, } ) +class DefaultTrueBooleanModel(models.Model): + cat = models.BooleanField(default=True) + dog = models.BooleanField(default=True) + +class SerializerDefaultTrueBoolean(TestCase): + + def setUp(self): + super(SerializerDefaultTrueBoolean, self).setUp() + + class DefaultTrueBooleanSerializer(serializers.ModelSerializer): + class Meta: + model = DefaultTrueBooleanModel + fields = ('cat', 'dog') + + self.default_true_boolean_serializer = DefaultTrueBooleanSerializer + + def test_blank_input(self): + serializer = self.default_true_boolean_serializer() + self.assertEqual(serializer.data['dog'], True) + self.assertEqual(serializer.data['cat'], True) + + + + def test_enabled_as_false(self): + serializer = self.default_true_boolean_serializer({'cat': False, 'dog': False}) + self.assertEqual(serializer.data['cat'], False) + self.assertEqual(serializer.data['dog'], False) + + + def test_enabled_as_true(self): + serializer = self.default_true_boolean_serializer({'cat': True, 'dog': True}) + self.assertEqual(serializer.data['cat'], True) + self.assertEqual(serializer.data['dog'], True)