summaryrefslogtreecommitdiff
path: root/django/forms/formsets.py
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2018-11-21 21:58:04 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-03-21 11:51:01 +0100
commit5fc5d935120a5d9d428b969ad209695704c10c73 (patch)
treebdb846ae83e6bf391402ed1973cb4b728922f689 /django/forms/formsets.py
parent413d50b5ff0c0a4198d4bf069e6434bc7ba4cd86 (diff)
Fixed #29956 -- Allowed overriding an order field widget in formsets.
Diffstat (limited to 'django/forms/formsets.py')
-rw-r--r--django/forms/formsets.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index ed93fa852e..44c2cb07f4 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -2,7 +2,7 @@ from django.core.exceptions import ValidationError
from django.forms import Form
from django.forms.fields import BooleanField, IntegerField
from django.forms.utils import ErrorList
-from django.forms.widgets import HiddenInput
+from django.forms.widgets import HiddenInput, NumberInput
from django.utils.functional import cached_property
from django.utils.html import html_safe
from django.utils.safestring import mark_safe
@@ -47,6 +47,8 @@ class BaseFormSet:
"""
A collection of instances of the same Form class.
"""
+ ordering_widget = NumberInput
+
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, form_kwargs=None):
self.is_bound = data is not None or files is not None
@@ -264,6 +266,10 @@ class BaseFormSet:
def get_default_prefix(cls):
return 'form'
+ @classmethod
+ def get_ordering_widget(cls):
+ return cls.ordering_widget
+
def non_form_errors(self):
"""
Return an ErrorList of errors that aren't associated with a particular
@@ -368,9 +374,18 @@ class BaseFormSet:
if self.can_order:
# Only pre-fill the ordering field for initial forms.
if index is not None and index < self.initial_form_count():
- form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_('Order'), initial=index + 1, required=False)
+ form.fields[ORDERING_FIELD_NAME] = IntegerField(
+ label=_('Order'),
+ initial=index + 1,
+ required=False,
+ widget=self.get_ordering_widget(),
+ )
else:
- form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_('Order'), required=False)
+ form.fields[ORDERING_FIELD_NAME] = IntegerField(
+ label=_('Order'),
+ required=False,
+ widget=self.get_ordering_widget(),
+ )
if self.can_delete:
form.fields[DELETION_FIELD_NAME] = BooleanField(label=_('Delete'), required=False)