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
This commit is contained in:
parent
28d0a0f788
commit
da771cc74c
|
@ -690,10 +690,6 @@ class BaseInlineFormSet(BaseModelFormSet):
|
||||||
return 0
|
return 0
|
||||||
return super(BaseInlineFormSet, self).initial_form_count()
|
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):
|
def _construct_form(self, i, **kwargs):
|
||||||
form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs)
|
form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs)
|
||||||
|
|
|
@ -17,3 +17,13 @@ class Restaurant(Place):
|
||||||
class Manager(models.Model):
|
class Manager(models.Model):
|
||||||
retaurant = models.ForeignKey(Restaurant)
|
retaurant = models.ForeignKey(Restaurant)
|
||||||
name = models.CharField(max_length=50)
|
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
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django import forms
|
||||||
from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory
|
from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from models import User, UserSite, Restaurant, Manager
|
from models import User, UserSite, Restaurant, Manager, Network, Host
|
||||||
|
|
||||||
|
|
||||||
class InlineFormsetTests(TestCase):
|
class InlineFormsetTests(TestCase):
|
||||||
|
@ -167,6 +167,39 @@ class InlineFormsetTests(TestCase):
|
||||||
self.assertTrue('id' in form.fields)
|
self.assertTrue('id' in form.fields)
|
||||||
self.assertEqual(len(form.fields), 1)
|
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):
|
class CustomWidget(forms.CharField):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue