summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2011-01-25 04:52:54 +0000
committerCarl Meyer <carl@oddbird.net>2011-01-25 04:52:54 +0000
commitda771cc74c32fc9cc4760fc60047f043ef8dfcb8 (patch)
treeb991c663428d723148ae897a4512ed5b28d7dd64 /tests
parent28d0a0f78840ff82d574c4827d75eda2ce6bf45a (diff)
Fixed #14938 - Fixed save-as-new on inline formset with new forms.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15306 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/model_formsets_regress/models.py10
-rw-r--r--tests/regressiontests/model_formsets_regress/tests.py35
2 files changed, 44 insertions, 1 deletions
diff --git a/tests/regressiontests/model_formsets_regress/models.py b/tests/regressiontests/model_formsets_regress/models.py
index bd12dd6c5a..937c789504 100644
--- a/tests/regressiontests/model_formsets_regress/models.py
+++ b/tests/regressiontests/model_formsets_regress/models.py
@@ -17,3 +17,13 @@ class Restaurant(Place):
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
diff --git a/tests/regressiontests/model_formsets_regress/tests.py b/tests/regressiontests/model_formsets_regress/tests.py
index 088f08d9b1..308bccebf1 100644
--- a/tests/regressiontests/model_formsets_regress/tests.py
+++ b/tests/regressiontests/model_formsets_regress/tests.py
@@ -2,7 +2,7 @@ from django import forms
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,6 +167,39 @@ class InlineFormsetTests(TestCase):
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