Author: carljm Date: 2011-01-24 23:06:43 -0600 (Mon, 24 Jan 2011) New Revision: 15307
Modified: django/branches/releases/1.2.X/django/forms/models.py django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/models.py django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/tests.py Log: [1.2.X] Fixed #14938 - Fixed save-as-new on inline formset with new forms. Backport of r15306 from trunk. Modified: django/branches/releases/1.2.X/django/forms/models.py =================================================================== --- django/branches/releases/1.2.X/django/forms/models.py 2011-01-25 04:52:54 UTC (rev 15306) +++ django/branches/releases/1.2.X/django/forms/models.py 2011-01-25 05:06:43 UTC (rev 15307) @@ -701,10 +701,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/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/models.py =================================================================== --- django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/models.py 2011-01-25 04:52:54 UTC (rev 15306) +++ django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/models.py 2011-01-25 05:06:43 UTC (rev 15307) @@ -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/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/tests.py =================================================================== --- django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/tests.py 2011-01-25 04:52:54 UTC (rev 15306) +++ django/branches/releases/1.2.X/tests/regressiontests/model_formsets_regress/tests.py 2011-01-25 05:06:43 UTC (rev 15307) @@ -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): @@ -159,7 +159,40 @@ form = Form(instance=None) formset = FormSet(instance=None) + 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.