Skip to content

Commit 160f912

Browse files
Schemas: Handle default=false for boolean fields (#7165)
1 parent d21b8eb commit 160f912

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

rest_framework/schemas/openapi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ def _map_serializer(self, serializer):
378378
schema['writeOnly'] = True
379379
if field.allow_null:
380380
schema['nullable'] = True
381-
if field.default and field.default != empty and not callable(field.default):
381+
if field.default is not None and field.default != empty and not callable(field.default):
382382
schema['default'] = field.default
383383
if field.help_text:
384384
schema['description'] = str(field.help_text)

tests/schemas/test_openapi.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,19 @@ class Serializer(serializers.Serializer):
7070
data = inspector._map_serializer(Serializer())
7171
assert isinstance(data['properties']['text']['description'], str), "description must be str"
7272

73+
def test_boolean_default_field(self):
74+
class Serializer(serializers.Serializer):
75+
default_true = serializers.BooleanField(default=True)
76+
default_false = serializers.BooleanField(default=False)
77+
without_default = serializers.BooleanField()
78+
79+
inspector = AutoSchema()
80+
81+
data = inspector._map_serializer(Serializer())
82+
assert data['properties']['default_true']['default'] is True, "default must be true"
83+
assert data['properties']['default_false']['default'] is False, "default must be false"
84+
assert 'default' not in data['properties']['without_default'], "default must not be defined"
85+
7386

7487
@pytest.mark.skipif(uritemplate is None, reason='uritemplate not installed.')
7588
class TestOperationIntrospection(TestCase):

0 commit comments

Comments
 (0)