diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 68835bded..141bf663c 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -678,18 +678,21 @@ class IntegerField(Field): message = self.error_messages['min_value'].format(min_value=self.min_value) self.validators.append(MinValueValidator(self.min_value, message=message)) + def coerce_to_int(self, value): + return int(self.re_decimal.sub('', str(value))) + def to_internal_value(self, data): if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH: self.fail('max_string_length') try: - data = int(self.re_decimal.sub('', str(data))) + data = self.coerce_to_int(data) except (ValueError, TypeError): self.fail('invalid') return data def to_representation(self, value): - return int(value) + return self.coerce_to_int(value) class FloatField(Field): diff --git a/tests/test_fields.py b/tests/test_fields.py index da6bd6ceb..c1497fb32 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -563,7 +563,8 @@ class TestIntegerField(FieldValues): 1: 1, 0: 0, 1.0: 1, - 0.0: 0 + 0.0: 0, + '1.0': 1 } field = serializers.IntegerField()