Author: carljm Date: 2011-01-24 22:52:54 -0600 (Mon, 24 Jan 2011) New Revision: 15306
Modified: django/trunk/django/forms/models.py django/trunk/tests/regressiontests/model_formsets_regress/models.py django/trunk/tests/regressiontests/model_formsets_regress/tests.py Log: Fixed #14938 - Fixed save-as-new on inline formset with new forms. Modified: django/trunk/django/forms/models.py =================================================================== --- django/trunk/django/forms/models.py 2011-01-25 04:08:17 UTC (rev 15305) +++ django/trunk/django/forms/models.py 2011-01-25 04:52:54 UTC (rev 15306) @@ -690,10 +690,6 @@ return 0 return super(BaseInlineFormSet, self).initial_form_count() - def total_form_count(self): - if self.save_as_new: - return super(BaseInlineFormSet, self).initial_form_count() - return super(BaseInlineFormSet, self).total_form_count() def _construct_form(self, i, **kwargs): form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs) Modified: django/trunk/tests/regressiontests/model_formsets_regress/models.py =================================================================== --- django/trunk/tests/regressiontests/model_formsets_regress/models.py 2011-01-25 04:08:17 UTC (rev 15305) +++ django/trunk/tests/regressiontests/model_formsets_regress/models.py 2011-01-25 04:52:54 UTC (rev 15306) @@ -17,3 +17,13 @@ class Manager(models.Model): retaurant = models.ForeignKey(Restaurant) name = models.CharField(max_length=50) + +class Network(models.Model): + name = models.CharField(max_length=15) + +class Host(models.Model): + network = models.ForeignKey(Network) + hostname = models.CharField(max_length=25) + + def __unicode__(self): + return self.hostname Modified: django/trunk/tests/regressiontests/model_formsets_regress/tests.py =================================================================== --- django/trunk/tests/regressiontests/model_formsets_regress/tests.py 2011-01-25 04:08:17 UTC (rev 15305) +++ django/trunk/tests/regressiontests/model_formsets_regress/tests.py 2011-01-25 04:52:54 UTC (rev 15306) @@ -2,7 +2,7 @@ from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory from django.test import TestCase -from models import User, UserSite, Restaurant, Manager +from models import User, UserSite, Restaurant, Manager, Network, Host class InlineFormsetTests(TestCase): @@ -167,7 +167,40 @@ self.assertTrue('id' in form.fields) self.assertEqual(len(form.fields), 1) + def test_save_as_new_with_new_inlines(self): + """ + Existing and new inlines are saved with save_as_new. + Regression for #14938. + + """ + efnet = Network.objects.create(name="EFNet") + host1 = Host.objects.create(hostname="irc.he.net", network=efnet) + + HostFormSet = inlineformset_factory(Network, Host) + + # Add a new host, modify previous host, and save-as-new + data = { + 'host_set-TOTAL_FORMS': u'2', + 'host_set-INITIAL_FORMS': u'1', + 'host_set-MAX_NUM_FORMS': u'0', + 'host_set-0-id': unicode(host1.id), + 'host_set-0-hostname': u'tranquility.hub.dal.net', + 'host_set-1-hostname': u'matrix.de.eu.dal.net' + } + + # To save a formset as new, it needs a new hub instance + dalnet = Network.objects.create(name="DALnet") + formset = HostFormSet(data, instance=dalnet, save_as_new=True) + + self.assertTrue(formset.is_valid()) + formset.save() + self.assertQuerysetEqual( + dalnet.host_set.order_by("hostname"), + ["<Host: matrix.de.eu.dal.net>", "<Host: tranquility.hub.dal.net>"] + ) + + class CustomWidget(forms.CharField): pass -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.