diff options
| author | Kapil Bansal <kapilbansal.gbpecdelhi@gmail.com> | 2022-05-12 11:30:47 +0200 |
|---|---|---|
| committer | Carlton Gibson <carlton@noumenal.es> | 2022-05-12 14:16:52 +0200 |
| commit | 3a82b5f655446f0ca89e3b6a92b100aa458f348f (patch) | |
| tree | 6e600054369b9316865b3b5b3ab1838769a2b54e /django/forms | |
| parent | 68da6b389c403cb91650754be0e2287696807333 (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.py | 14 |
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 |
