mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-13 18:11:05 +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')):
|
if value in (decimal.Decimal('Inf'), decimal.Decimal('-Inf')):
|
||||||
self.fail('invalid')
|
self.fail('invalid')
|
||||||
|
|
||||||
return self.validate_precision(value)
|
return self.quantize(self.validate_precision(value))
|
||||||
|
|
||||||
def validate_precision(self, value):
|
def validate_precision(self, value):
|
||||||
"""
|
"""
|
||||||
|
@ -1018,7 +1018,8 @@ class DecimalField(Field):
|
||||||
context.prec = self.max_digits
|
context.prec = self.max_digits
|
||||||
return value.quantize(
|
return value.quantize(
|
||||||
decimal.Decimal('.1') ** self.decimal_places,
|
decimal.Decimal('.1') ** self.decimal_places,
|
||||||
context=context)
|
context=context
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Date & time fields...
|
# Date & time fields...
|
||||||
|
|
|
@ -912,6 +912,26 @@ class TestLocalizedDecimalField(TestCase):
|
||||||
self.assertTrue(isinstance(field.to_representation(Decimal('1.1')), six.string_types))
|
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):
|
class TestNoDecimalPlaces(FieldValues):
|
||||||
valid_inputs = {
|
valid_inputs = {
|
||||||
'0.12345': Decimal('0.12345'),
|
'0.12345': Decimal('0.12345'),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user