diff --git a/rest_framework/fields.py b/rest_framework/fields.py index fda656507b..cbc02e2c2b 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -4,9 +4,9 @@ import decimal import functools import inspect -import logging import re import uuid +import warnings from collections.abc import Mapping from enum import Enum @@ -44,8 +44,6 @@ from rest_framework.utils.timezone import valid_datetime from rest_framework.validators import ProhibitSurrogateCharactersValidator -logger = logging.getLogger("rest_framework.fields") - class empty: """ @@ -989,9 +987,9 @@ def __init__(self, max_digits, decimal_places, coerce_to_string=None, 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.") + warnings.warn("max_value should be a Decimal instance.") 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.") + warnings.warn("min_value should be a Decimal instance.") if self.max_digits is not None and self.decimal_places is not None: self.max_whole_digits = self.max_digits - self.decimal_places diff --git a/tests/test_fields.py b/tests/test_fields.py index 2b6fc56ac0..9ac84dd210 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -4,6 +4,7 @@ import re import sys import uuid +import warnings from decimal import ROUND_DOWN, ROUND_UP, Decimal from enum import auto from unittest.mock import patch @@ -1254,15 +1255,19 @@ class TestMinMaxDecimalField(FieldValues): ) 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.") - ] + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always') + + serializers.DecimalField( + max_digits=3, decimal_places=1, + min_value=10, max_value=20 + ) + + assert len(w) == 2 + assert all(issubclass(i.category, UserWarning) for i in w) + + assert 'max_value should be a Decimal instance' in str(w[0].message) + assert 'min_value should be a Decimal instance' in str(w[1].message) class TestAllowEmptyStrDecimalFieldWithValidators(FieldValues):