mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 13:14:30 +03:00
Quantize incoming digitals (#4339)
This commit is contained in:
parent
aa349fe767
commit
46a44e52aa
|
@ -955,7 +955,7 @@ class DecimalField(Field):
|
|||
if value in (decimal.Decimal('Inf'), decimal.Decimal('-Inf')):
|
||||
self.fail('invalid')
|
||||
|
||||
return self.validate_precision(value)
|
||||
return self.quantize(self.validate_precision(value))
|
||||
|
||||
def validate_precision(self, value):
|
||||
"""
|
||||
|
@ -1018,7 +1018,8 @@ class DecimalField(Field):
|
|||
context.prec = self.max_digits
|
||||
return value.quantize(
|
||||
decimal.Decimal('.1') ** self.decimal_places,
|
||||
context=context)
|
||||
context=context
|
||||
)
|
||||
|
||||
|
||||
# Date & time fields...
|
||||
|
|
|
@ -912,6 +912,26 @@ class TestLocalizedDecimalField(TestCase):
|
|||
self.assertTrue(isinstance(field.to_representation(Decimal('1.1')), six.string_types))
|
||||
|
||||
|
||||
class TestQuantizedValueForDecimal(TestCase):
|
||||
def test_int_quantized_value_for_decimal(self):
|
||||
field = serializers.DecimalField(max_digits=4, decimal_places=2)
|
||||
value = field.to_internal_value(12).as_tuple()
|
||||
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
|
||||
self.assertEqual(value, expected_digit_tuple)
|
||||
|
||||
def test_string_quantized_value_for_decimal(self):
|
||||
field = serializers.DecimalField(max_digits=4, decimal_places=2)
|
||||
value = field.to_internal_value('12').as_tuple()
|
||||
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
|
||||
self.assertEqual(value, expected_digit_tuple)
|
||||
|
||||
def test_part_precision_string_quantized_value_for_decimal(self):
|
||||
field = serializers.DecimalField(max_digits=4, decimal_places=2)
|
||||
value = field.to_internal_value('12.0').as_tuple()
|
||||
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
|
||||
self.assertEqual(value, expected_digit_tuple)
|
||||
|
||||
|
||||
class TestNoDecimalPlaces(FieldValues):
|
||||
valid_inputs = {
|
||||
'0.12345': Decimal('0.12345'),
|
||||
|
|
Loading…
Reference in New Issue
Block a user