Loading django/forms/fields.py +3 −1 Original line number Diff line number Diff line Loading @@ -236,6 +236,7 @@ class IntegerField(Field): default_error_messages = { 'invalid': _('Enter a whole number.'), } re_decimal = re.compile(r'\.0*\s*$') def __init__(self, max_value=None, min_value=None, *args, **kwargs): self.max_value, self.min_value = max_value, min_value Loading @@ -259,8 +260,9 @@ class IntegerField(Field): return None if self.localize: value = formats.sanitize_separators(value) # Strip trailing decimal and zeros. try: value = int(str(value)) value = int(self.re_decimal.sub('', str(value))) except (ValueError, TypeError): raise ValidationError(self.error_messages['invalid'], code='invalid') return value Loading tests/forms_tests/tests/test_fields.py +17 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,23 @@ class FieldsTests(SimpleTestCase): f1 = IntegerField(localize=True) self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" />') def test_integerfield_float(self): f = IntegerField() self.assertEqual(1, f.clean(1.0)) self.assertEqual(1, f.clean('1.0')) self.assertEqual(1, f.clean(b'1.0')) self.assertEqual(1, f.clean(' 1.0 ')) self.assertEqual(1, f.clean('1.')) self.assertEqual(1, f.clean(' 1. ')) self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '1.5') self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '…') def test_integerfield_big_num(self): f = IntegerField() self.assertEqual(9223372036854775808, f.clean(9223372036854775808)) self.assertEqual(9223372036854775808, f.clean('9223372036854775808')) self.assertEqual(9223372036854775808, f.clean('9223372036854775808.0')) def test_integerfield_subclass(self): """ Test that class-defined widget is not overwritten by __init__ (#22245). Loading Loading
django/forms/fields.py +3 −1 Original line number Diff line number Diff line Loading @@ -236,6 +236,7 @@ class IntegerField(Field): default_error_messages = { 'invalid': _('Enter a whole number.'), } re_decimal = re.compile(r'\.0*\s*$') def __init__(self, max_value=None, min_value=None, *args, **kwargs): self.max_value, self.min_value = max_value, min_value Loading @@ -259,8 +260,9 @@ class IntegerField(Field): return None if self.localize: value = formats.sanitize_separators(value) # Strip trailing decimal and zeros. try: value = int(str(value)) value = int(self.re_decimal.sub('', str(value))) except (ValueError, TypeError): raise ValidationError(self.error_messages['invalid'], code='invalid') return value Loading
tests/forms_tests/tests/test_fields.py +17 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,23 @@ class FieldsTests(SimpleTestCase): f1 = IntegerField(localize=True) self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" />') def test_integerfield_float(self): f = IntegerField() self.assertEqual(1, f.clean(1.0)) self.assertEqual(1, f.clean('1.0')) self.assertEqual(1, f.clean(b'1.0')) self.assertEqual(1, f.clean(' 1.0 ')) self.assertEqual(1, f.clean('1.')) self.assertEqual(1, f.clean(' 1. ')) self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '1.5') self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '…') def test_integerfield_big_num(self): f = IntegerField() self.assertEqual(9223372036854775808, f.clean(9223372036854775808)) self.assertEqual(9223372036854775808, f.clean('9223372036854775808')) self.assertEqual(9223372036854775808, f.clean('9223372036854775808.0')) def test_integerfield_subclass(self): """ Test that class-defined widget is not overwritten by __init__ (#22245). Loading