mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #9061 -- Allowed FormSets to disable deleting extra forms.
Thanks to Dan Ward for the initial patch.
This commit is contained in:
committed by
Mariusz Felisiak
parent
2e8941b6f9
commit
162765d6c3
@@ -372,9 +372,10 @@ class BaseFormSet:
|
||||
|
||||
def add_fields(self, form, index):
|
||||
"""A hook for adding extra fields on to each form instance."""
|
||||
initial_form_count = self.initial_form_count()
|
||||
if self.can_order:
|
||||
# Only pre-fill the ordering field for initial forms.
|
||||
if index is not None and index < self.initial_form_count():
|
||||
if index is not None and index < initial_form_count:
|
||||
form.fields[ORDERING_FIELD_NAME] = IntegerField(
|
||||
label=_('Order'),
|
||||
initial=index + 1,
|
||||
@@ -387,7 +388,7 @@ class BaseFormSet:
|
||||
required=False,
|
||||
widget=self.get_ordering_widget(),
|
||||
)
|
||||
if self.can_delete:
|
||||
if self.can_delete and (self.can_delete_extra or index < initial_form_count):
|
||||
form.fields[DELETION_FIELD_NAME] = BooleanField(label=_('Delete'), required=False)
|
||||
|
||||
def add_prefix(self, index):
|
||||
@@ -433,7 +434,8 @@ class BaseFormSet:
|
||||
|
||||
def formset_factory(form, formset=BaseFormSet, extra=1, can_order=False,
|
||||
can_delete=False, max_num=None, validate_max=False,
|
||||
min_num=None, validate_min=False, absolute_max=None):
|
||||
min_num=None, validate_min=False, absolute_max=None,
|
||||
can_delete_extra=True):
|
||||
"""Return a FormSet for the given form class."""
|
||||
if min_num is None:
|
||||
min_num = DEFAULT_MIN_NUM
|
||||
@@ -453,6 +455,7 @@ def formset_factory(form, formset=BaseFormSet, extra=1, can_order=False,
|
||||
'extra': extra,
|
||||
'can_order': can_order,
|
||||
'can_delete': can_delete,
|
||||
'can_delete_extra': can_delete_extra,
|
||||
'min_num': min_num,
|
||||
'max_num': max_num,
|
||||
'absolute_max': absolute_max,
|
||||
|
||||
@@ -863,7 +863,7 @@ def modelformset_factory(model, form=ModelForm, formfield_callback=None,
|
||||
widgets=None, validate_max=False, localized_fields=None,
|
||||
labels=None, help_texts=None, error_messages=None,
|
||||
min_num=None, validate_min=False, field_classes=None,
|
||||
absolute_max=None):
|
||||
absolute_max=None, can_delete_extra=True):
|
||||
"""Return a FormSet class for the given Django model class."""
|
||||
meta = getattr(form, 'Meta', None)
|
||||
if (getattr(meta, 'fields', fields) is None and
|
||||
@@ -881,7 +881,7 @@ def modelformset_factory(model, form=ModelForm, formfield_callback=None,
|
||||
FormSet = formset_factory(form, formset, extra=extra, min_num=min_num, max_num=max_num,
|
||||
can_order=can_order, can_delete=can_delete,
|
||||
validate_min=validate_min, validate_max=validate_max,
|
||||
absolute_max=absolute_max)
|
||||
absolute_max=absolute_max, can_delete_extra=can_delete_extra)
|
||||
FormSet.model = model
|
||||
return FormSet
|
||||
|
||||
@@ -1051,7 +1051,7 @@ def inlineformset_factory(parent_model, model, form=ModelForm,
|
||||
widgets=None, validate_max=False, localized_fields=None,
|
||||
labels=None, help_texts=None, error_messages=None,
|
||||
min_num=None, validate_min=False, field_classes=None,
|
||||
absolute_max=None):
|
||||
absolute_max=None, can_delete_extra=True):
|
||||
"""
|
||||
Return an ``InlineFormSet`` for the given kwargs.
|
||||
|
||||
@@ -1082,6 +1082,7 @@ def inlineformset_factory(parent_model, model, form=ModelForm,
|
||||
'error_messages': error_messages,
|
||||
'field_classes': field_classes,
|
||||
'absolute_max': absolute_max,
|
||||
'can_delete_extra': can_delete_extra,
|
||||
}
|
||||
FormSet = modelformset_factory(model, **kwargs)
|
||||
FormSet.fk = fk
|
||||
|
||||
Reference in New Issue
Block a user