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.

Reply via email to