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