summaryrefslogtreecommitdiff
path: root/tests/model_formsets
diff options
context:
space:
mode:
Diffstat (limited to 'tests/model_formsets')
-rw-r--r--tests/model_formsets/tests.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py
index fc0dff8304..4387fbf52d 100644
--- a/tests/model_formsets/tests.py
+++ b/tests/model_formsets/tests.py
@@ -1631,6 +1631,28 @@ class ModelFormsetTest(TestCase):
['Please correct the duplicate data for subtitle which must be unique for the month in posted.']
)
+ def test_prevent_change_outer_model_and_create_invalid_data(self):
+ author = Author.objects.create(name='Charles')
+ other_author = Author.objects.create(name='Walt')
+ AuthorFormSet = modelformset_factory(Author, fields='__all__')
+ data = {
+ 'form-TOTAL_FORMS': '2',
+ 'form-INITIAL_FORMS': '2',
+ 'form-MAX_NUM_FORMS': '',
+ 'form-0-id': str(author.id),
+ 'form-0-name': 'Charles',
+ 'form-1-id': str(other_author.id), # A model not in the formset's queryset.
+ 'form-1-name': 'Changed name',
+ }
+ # This formset is only for Walt Whitman and shouldn't accept data for
+ # other_author.
+ formset = AuthorFormSet(data=data, queryset=Author.objects.filter(id__in=(author.id,)))
+ self.assertTrue(formset.is_valid())
+ formset.save()
+ # The name of other_author shouldn't be changed and new models aren't
+ # created.
+ self.assertQuerysetEqual(Author.objects.all(), ['<Author: Charles>', '<Author: Walt>'])
+
class TestModelFormsetOverridesTroughFormMeta(TestCase):
def test_modelformset_factory_widgets(self):