From a59fbc3f74c29ca1b350116053f42629f3182336 Mon Sep 17 00:00:00 2001 From: "zainnadeem(RedOpsCell)" Date: Tue, 9 Jun 2026 15:35:35 +0500 Subject: [PATCH] Fix OpenAPI zero numeric bounds for list children --- rest_framework/schemas/openapi.py | 4 ++-- tests/schemas/test_openapi.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index a048f93247..c949328a31 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -508,9 +508,9 @@ def map_field(self, field): return {'type': FIELD_CLASS_SCHEMA_TYPE.get(field.__class__, 'string')} def _map_min_max(self, field, content): - if field.max_value: + if field.max_value is not None: content['maximum'] = field.max_value - if field.min_value: + if field.min_value is not None: content['minimum'] = field.min_value def map_serializer(self, serializer): diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index 13746bb903..98ea2d3d9f 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -61,7 +61,15 @@ def test_list_field_mapping(self): (serializers.ListField(), {'items': {}, 'type': 'array'}), (serializers.ListField(child=serializers.BooleanField()), {'items': {'type': 'boolean'}, 'type': 'array'}), (serializers.ListField(child=serializers.FloatField()), {'items': {'type': 'number'}, 'type': 'array'}), + (serializers.ListField(child=serializers.FloatField(min_value=0.0)), + {'items': {'type': 'number', 'minimum': 0.0}, 'type': 'array'}), + (serializers.ListField(child=serializers.FloatField(max_value=0.0)), + {'items': {'type': 'number', 'maximum': 0.0}, 'type': 'array'}), (serializers.ListField(child=serializers.CharField()), {'items': {'type': 'string'}, 'type': 'array'}), + (serializers.ListField(child=serializers.IntegerField(min_value=0)), + {'items': {'type': 'integer', 'minimum': 0}, 'type': 'array'}), + (serializers.ListField(child=serializers.IntegerField(max_value=0)), + {'items': {'type': 'integer', 'maximum': 0}, 'type': 'array'}), (serializers.ListField(child=serializers.IntegerField(max_value=4294967295)), {'items': {'type': 'integer', 'maximum': 4294967295, 'format': 'int64'}, 'type': 'array'}), (serializers.ListField(child=serializers.ChoiceField(choices=[('a', 'Choice A'), ('b', 'Choice B')])),