From 008ba77dfd23576a8080f05e3c45a19da73b20ba Mon Sep 17 00:00:00 2001 From: Alexander Kavanaugh Date: Mon, 1 May 2017 16:58:28 -0700 Subject: [1.11.x] Fixed #28159 -- Fixed BaseInlineFormSet._construct_form() crash when using save_as_new. Regression in 4a246a02bdcbc13b15480c014f51cb0682af7c1e. Backport of 362fba87c9bb4f88542ba82ce4a732fed2634be7 from master --- tests/model_formsets/tests.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'tests/model_formsets') diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py index 4387fbf52d..bc8cf1cac3 100644 --- a/tests/model_formsets/tests.py +++ b/tests/model_formsets/tests.py @@ -12,6 +12,7 @@ from django.forms.models import ( BaseModelFormSet, _get_foreign_key, inlineformset_factory, modelformset_factory, ) +from django.http import QueryDict from django.test import TestCase, skipUnlessDBFeature from django.utils import six @@ -702,7 +703,9 @@ class ModelFormsetTest(TestCase): AuthorBooksFormSet = inlineformset_factory(Author, Book, can_delete=False, extra=2, fields="__all__") Author.objects.create(name='Charles Baudelaire') - data = { + # An immutable QueryDict simulates request.POST. + data = QueryDict(mutable=True) + data.update({ 'book_set-TOTAL_FORMS': '3', # the number of forms rendered 'book_set-INITIAL_FORMS': '2', # the number of forms with initial data 'book_set-MAX_NUM_FORMS': '', # the max number of forms @@ -711,10 +714,12 @@ class ModelFormsetTest(TestCase): 'book_set-1-id': '2', 'book_set-1-title': 'Les Paradis Artificiels', 'book_set-2-title': '', - } + }) + data._mutable = False formset = AuthorBooksFormSet(data, instance=Author(), save_as_new=True) self.assertTrue(formset.is_valid()) + self.assertIs(data._mutable, False) new_author = Author.objects.create(name='Charles Baudelaire') formset = AuthorBooksFormSet(data, instance=new_author, save_as_new=True) -- cgit v1.3