Commit cc957cb1 authored by Daniel Langer's avatar Daniel Langer Committed by Tim Graham
Browse files

Fixed #4287 -- Fixed NaN and +/- Infinity handling in FloatField

NaN, +Inf, and -Inf are no longer valid values for FloatFields.
parent cd4068f3
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -279,6 +279,15 @@ class FloatField(IntegerField):
            raise ValidationError(self.error_messages['invalid'], code='invalid')
        return value

    def validate(self, value):
        super(FloatField, self).validate(value)

        # Check for NaN (which is the only thing not equal to itself) and +/- infinity
        if value != value or value in (Decimal('Inf'), Decimal('-Inf')):
            raise ValidationError(self.error_messages['invalid'], code='invalid')

        return value

    def widget_attrs(self, widget):
        attrs = super(FloatField, self).widget_attrs(widget)
        if isinstance(widget, NumberInput):
+3 −0
Original line number Diff line number Diff line
@@ -254,6 +254,9 @@ class FieldsTests(SimpleTestCase):
        self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '1.0a')
        self.assertEqual(f.max_value, None)
        self.assertEqual(f.min_value, None)
        self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'Infinity')
        self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'NaN')
        self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '-Inf')

    def test_floatfield_2(self):
        f = FloatField(required=False)