diff --git a/rest_framework/fields.py b/rest_framework/fields.py index f4fd26539..4f82e4a10 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -4,6 +4,7 @@ import datetime import decimal import functools import inspect +import logging import re import uuid from collections.abc import Mapping @@ -38,6 +39,8 @@ from rest_framework.utils.formatting import lazy_format from rest_framework.utils.timezone import valid_datetime from rest_framework.validators import ProhibitSurrogateCharactersValidator +logger = logging.getLogger("rest_framework.fields") + class empty: """ @@ -990,6 +993,11 @@ class DecimalField(Field): self.max_value = max_value self.min_value = min_value + if self.max_value is not None and not isinstance(self.max_value, decimal.Decimal): + logger.warning("max_value in DecimalField should be Decimal type.") + if self.min_value is not None and not isinstance(self.min_value, decimal.Decimal): + logger.warning("min_value in DecimalField should be Decimal type.") + if self.max_digits is not None and self.decimal_places is not None: self.max_whole_digits = self.max_digits - self.decimal_places else: diff --git a/tests/test_fields.py b/tests/test_fields.py index bf25b71b8..bcf388441 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1216,6 +1216,17 @@ class TestMinMaxDecimalField(FieldValues): min_value=10, max_value=20 ) + def test_warning_when_not_decimal_types(self, caplog): + import logging + serializers.DecimalField( + max_digits=3, decimal_places=1, + min_value=10, max_value=20 + ) + assert caplog.record_tuples == [ + ("rest_framework.fields", logging.WARNING, "max_value in DecimalField should be Decimal type."), + ("rest_framework.fields", logging.WARNING, "min_value in DecimalField should be Decimal type.") + ] + class TestAllowEmptyStrDecimalFieldWithValidators(FieldValues): """