summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorKapil Bansal <kapilbansal.gbpecdelhi@gmail.com>2022-05-12 11:30:47 +0200
committerCarlton Gibson <carlton@noumenal.es>2022-05-12 14:16:52 +0200
commit3a82b5f655446f0ca89e3b6a92b100aa458f348f (patch)
tree6e600054369b9316865b3b5b3ab1838769a2b54e /django/forms
parent68da6b389c403cb91650754be0e2287696807333 (diff)
Fixed #32559 -- Added 'step_size’ to numeric form fields.
Co-authored-by: Jacob Rief <jacob.rief@uibk.ac.at>
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/fields.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py
index a7031936dd..8fa7b72cfd 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -299,8 +299,8 @@ class IntegerField(Field):
}
re_decimal = _lazy_re_compile(r"\.0*\s*$")
- def __init__(self, *, max_value=None, min_value=None, **kwargs):
- self.max_value, self.min_value = max_value, min_value
+ def __init__(self, *, max_value=None, min_value=None, step_size=None, **kwargs):
+ self.max_value, self.min_value, self.step_size = max_value, min_value, step_size
if kwargs.get("localize") and self.widget == NumberInput:
# Localized number input is not well supported on most browsers
kwargs.setdefault("widget", super().widget)
@@ -310,6 +310,8 @@ class IntegerField(Field):
self.validators.append(validators.MaxValueValidator(max_value))
if min_value is not None:
self.validators.append(validators.MinValueValidator(min_value))
+ if step_size is not None:
+ self.validators.append(validators.StepValueValidator(step_size))
def to_python(self, value):
"""
@@ -335,6 +337,8 @@ class IntegerField(Field):
attrs["min"] = self.min_value
if self.max_value is not None:
attrs["max"] = self.max_value
+ if self.step_size is not None:
+ attrs["step"] = self.step_size
return attrs
@@ -369,7 +373,11 @@ class FloatField(IntegerField):
def widget_attrs(self, widget):
attrs = super().widget_attrs(widget)
if isinstance(widget, NumberInput) and "step" not in widget.attrs:
- attrs.setdefault("step", "any")
+ if self.step_size is not None:
+ step = str(self.step_size)
+ else:
+ step = "any"
+ attrs.setdefault("step", step)
return attrs