From 4d8a0f8902dd55348fbaf897048bef1cba285f05 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 4 Feb 2012 16:05:39 +0000 Subject: [PATCH] Fixed #17594 -- Stopped ModelFormset.save from running a SELECT query by relying on the fact that the initial form is already set. Thanks, tswicegood. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17434 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/forms/models.py | 2 +- tests/regressiontests/model_formsets_regress/tests.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/forms/models.py b/django/forms/models.py index 15d50419d4..cd8f027070 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -591,7 +591,7 @@ class BaseModelFormSet(BaseFormSet): def save_existing_objects(self, commit=True): self.changed_objects = [] self.deleted_objects = [] - if not self.get_queryset(): + if not self.initial_forms: return [] saved_instances = [] diff --git a/tests/regressiontests/model_formsets_regress/tests.py b/tests/regressiontests/model_formsets_regress/tests.py index 613d77616c..f1e935e2ea 100644 --- a/tests/regressiontests/model_formsets_regress/tests.py +++ b/tests/regressiontests/model_formsets_regress/tests.py @@ -249,6 +249,17 @@ class FormsetTests(TestCase): self.assertEqual(formset.extra_forms[0].initial['username'], "apollo11") self.assertTrue(u'value="apollo12"' in formset.extra_forms[1].as_p()) + def test_extraneous_query_is_not_run(self): + Formset = modelformset_factory(Network) + data = {u'test-TOTAL_FORMS': u'1', + u'test-INITIAL_FORMS': u'0', + u'test-MAX_NUM_FORMS': u'', + u'test-0-name': u'Random Place', } + with self.assertNumQueries(1): + formset = Formset(data, prefix="test") + formset.save() + + class CustomWidget(forms.CharField): pass