summaryrefslogtreecommitdiff
path: root/tests/model_formsets
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2020-04-30 08:34:53 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-06-05 12:01:32 +0200
commit433dd737f94b09043f64b873b0ac067b3f97364b (patch)
tree5c4dcf3c3c7d36008389d28f72c07f70726d65d0 /tests/model_formsets
parentb5aa9cb20f2d8fbffec3bc18aa31fca5f26d6f64 (diff)
downloaddjango-433dd737f94b09043f64b873b0ac067b3f97364b.tar.gz
Fixed #20347 -- Allowed customizing the maximum number of instantiated forms in formsets.
Co-authored-by: ethurgood <ethurgood@gmail.com>
Diffstat (limited to 'tests/model_formsets')
-rw-r--r--tests/model_formsets/tests.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py
index 90e5cb1bd8..8c6d87e59c 100644
--- a/tests/model_formsets/tests.py
+++ b/tests/model_formsets/tests.py
@@ -1838,3 +1838,81 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase):
form = BookFormSet.form(data={'title': 'Foo ' * 30, 'author': author.id})
self.assertIs(Book._meta.get_field('title').__class__, models.CharField)
self.assertIsInstance(form.fields['title'], forms.SlugField)
+
+ def test_modelformset_factory_absolute_max(self):
+ AuthorFormSet = modelformset_factory(Author, fields='__all__', absolute_max=1500)
+ data = {
+ 'form-TOTAL_FORMS': '1501',
+ 'form-INITIAL_FORMS': '0',
+ 'form-MAX_NUM_FORMS': '0',
+ }
+ formset = AuthorFormSet(data=data)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 1500)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 1000 or fewer forms.'],
+ )
+
+ def test_modelformset_factory_absolute_max_with_max_num(self):
+ AuthorFormSet = modelformset_factory(
+ Author,
+ fields='__all__',
+ max_num=20,
+ absolute_max=100,
+ )
+ data = {
+ 'form-TOTAL_FORMS': '101',
+ 'form-INITIAL_FORMS': '0',
+ 'form-MAX_NUM_FORMS': '0',
+ }
+ formset = AuthorFormSet(data=data)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 100)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 20 or fewer forms.'],
+ )
+
+ def test_inlineformset_factory_absolute_max(self):
+ author = Author.objects.create(name='Charles Baudelaire')
+ BookFormSet = inlineformset_factory(
+ Author,
+ Book,
+ fields='__all__',
+ absolute_max=1500,
+ )
+ data = {
+ 'book_set-TOTAL_FORMS': '1501',
+ 'book_set-INITIAL_FORMS': '0',
+ 'book_set-MAX_NUM_FORMS': '0',
+ }
+ formset = BookFormSet(data, instance=author)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 1500)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 1000 or fewer forms.'],
+ )
+
+ def test_inlineformset_factory_absolute_max_with_max_num(self):
+ author = Author.objects.create(name='Charles Baudelaire')
+ BookFormSet = inlineformset_factory(
+ Author,
+ Book,
+ fields='__all__',
+ max_num=20,
+ absolute_max=100,
+ )
+ data = {
+ 'book_set-TOTAL_FORMS': '101',
+ 'book_set-INITIAL_FORMS': '0',
+ 'book_set-MAX_NUM_FORMS': '0',
+ }
+ formset = BookFormSet(data, instance=author)
+ self.assertIs(formset.is_valid(), False)
+ self.assertEqual(len(formset.forms), 100)
+ self.assertEqual(
+ formset.non_form_errors(),
+ ['Please submit 20 or fewer forms.'],
+ )