Simplified Float/DecimalField.validate() with math.isfinite().
This commit is contained in:
parent
5244d7cf54
commit
5cb7619995
|
@ -5,6 +5,7 @@ Field classes.
|
||||||
import copy
|
import copy
|
||||||
import datetime
|
import datetime
|
||||||
import itertools
|
import itertools
|
||||||
|
import math
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import uuid
|
import uuid
|
||||||
|
@ -306,13 +307,11 @@ class FloatField(IntegerField):
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
super().validate(value)
|
super().validate(value)
|
||||||
|
if value in self.empty_values:
|
||||||
# Check for NaN (which is the only thing not equal to itself) and +/- infinity
|
return
|
||||||
if value != value or value in (Decimal('Inf'), Decimal('-Inf')):
|
if not math.isfinite(value):
|
||||||
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
||||||
|
|
||||||
return value
|
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
attrs = super().widget_attrs(widget)
|
attrs = super().widget_attrs(widget)
|
||||||
if isinstance(widget, NumberInput) and 'step' not in widget.attrs:
|
if isinstance(widget, NumberInput) and 'step' not in widget.attrs:
|
||||||
|
@ -352,10 +351,7 @@ class DecimalField(IntegerField):
|
||||||
super().validate(value)
|
super().validate(value)
|
||||||
if value in self.empty_values:
|
if value in self.empty_values:
|
||||||
return
|
return
|
||||||
# Check for NaN, Inf and -Inf values. We can't compare directly for NaN,
|
if not math.isfinite(value):
|
||||||
# since it is never equal to itself. However, NaN is the only value that
|
|
||||||
# isn't equal to itself, so we can use this to identify NaN
|
|
||||||
if value != value or value == Decimal("Inf") or value == Decimal("-Inf"):
|
|
||||||
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
raise ValidationError(self.error_messages['invalid'], code='invalid')
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
|
|
Loading…
Reference in New Issue