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.

Reply via email to