summaryrefslogtreecommitdiff
path: root/tests/model_formsets
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2020-06-19 22:46:25 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-06-24 09:26:25 +0200
commit162765d6c3182e36095d29543e21b44b908625fc (patch)
tree73e252e23ec3986a4a7a2750c5ff36c7e2ed0330 /tests/model_formsets
parent2e8941b6f90e65ffad3f07083b8de59e8ed29767 (diff)
Fixed #9061 -- Allowed FormSets to disable deleting extra forms.
Thanks to Dan Ward for the initial patch.
Diffstat (limited to 'tests/model_formsets')
-rw-r--r--tests/model_formsets/tests.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py
index 8c6d87e59c..a01dd75e87 100644
--- a/tests/model_formsets/tests.py
+++ b/tests/model_formsets/tests.py
@@ -1916,3 +1916,57 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase):
formset.non_form_errors(),
['Please submit 20 or fewer forms.'],
)
+
+ def test_modelformset_factory_can_delete_extra(self):
+ AuthorFormSet = modelformset_factory(
+ Author,
+ fields='__all__',
+ can_delete=True,
+ can_delete_extra=True,
+ extra=2,
+ )
+ formset = AuthorFormSet()
+ self.assertEqual(len(formset), 2)
+ self.assertIn('DELETE', formset.forms[0].fields)
+ self.assertIn('DELETE', formset.forms[1].fields)
+
+ def test_modelformset_factory_disable_delete_extra(self):
+ AuthorFormSet = modelformset_factory(
+ Author,
+ fields='__all__',
+ can_delete=True,
+ can_delete_extra=False,
+ extra=2,
+ )
+ formset = AuthorFormSet()
+ self.assertEqual(len(formset), 2)
+ self.assertNotIn('DELETE', formset.forms[0].fields)
+ self.assertNotIn('DELETE', formset.forms[1].fields)
+
+ def test_inlineformset_factory_can_delete_extra(self):
+ BookFormSet = inlineformset_factory(
+ Author,
+ Book,
+ fields='__all__',
+ can_delete=True,
+ can_delete_extra=True,
+ extra=2,
+ )
+ formset = BookFormSet()
+ self.assertEqual(len(formset), 2)
+ self.assertIn('DELETE', formset.forms[0].fields)
+ self.assertIn('DELETE', formset.forms[1].fields)
+
+ def test_inlineformset_factory_can_not_delete_extra(self):
+ BookFormSet = inlineformset_factory(
+ Author,
+ Book,
+ fields='__all__',
+ can_delete=True,
+ can_delete_extra=False,
+ extra=2,
+ )
+ formset = BookFormSet()
+ self.assertEqual(len(formset), 2)
+ self.assertNotIn('DELETE', formset.forms[0].fields)
+ self.assertNotIn('DELETE', formset.forms[1].fields)