Author: jacob
Date: 2009-05-08 07:53:14 -0500 (Fri, 08 May 2009)
New Revision: 10713

Modified:
   django/trunk/django/contrib/admin/options.py
   django/trunk/tests/regressiontests/admin_views/models.py
   django/trunk/tests/regressiontests/admin_views/tests.py
Log:
Fixed #10448: correcting errors on "save as new" now correctly create a new 
object instead of modifying the old one. Thanks, bastih.

Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py        2009-05-08 11:31:36 UTC 
(rev 10712)
+++ django/trunk/django/contrib/admin/options.py        2009-05-08 12:53:14 UTC 
(rev 10713)
@@ -780,7 +780,7 @@
             'app_label': opts.app_label,
         }
         context.update(extra_context or {})
-        return self.render_change_form(request, context, add=True)
+        return self.render_change_form(request, context, form_url=form_url, 
add=True)
     add_view = transaction.commit_on_success(add_view)
 
     def change_view(self, request, object_id, extra_context=None):
@@ -803,7 +803,7 @@
             raise Http404(_('%(name)s object with primary key %(key)r does not 
exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
 
         if request.method == 'POST' and request.POST.has_key("_saveasnew"):
-            return self.add_view(request, form_url='../../add/')
+            return self.add_view(request, form_url='../add/')
 
         ModelForm = self.get_form(request, obj)
         formsets = []

Modified: django/trunk/tests/regressiontests/admin_views/models.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/models.py    2009-05-08 
11:31:36 UTC (rev 10712)
+++ django/trunk/tests/regressiontests/admin_views/models.py    2009-05-08 
12:53:14 UTC (rev 10713)
@@ -174,6 +174,7 @@
     list_filter = ('gender',)
     search_fields = (u'name',)
     ordering = ["id"]
+    save_as = True
 
 class Persona(models.Model):
     """

Modified: django/trunk/tests/regressiontests/admin_views/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/tests.py     2009-05-08 
11:31:36 UTC (rev 10712)
+++ django/trunk/tests/regressiontests/admin_views/tests.py     2009-05-08 
12:53:14 UTC (rev 10713)
@@ -234,6 +234,34 @@
             "Changelist filter isn't showing options contained inside a model 
field 'choices' option named group."
         )
 
+class SaveAsTests(TestCase):
+    fixtures = ['admin-views-users.xml','admin-views-person.xml']
+    
+    def setUp(self):
+        self.client.login(username='super', password='secret')
+
+    def tearDown(self):
+        self.client.logout()
+    
+    def test_save_as_duplication(self):
+        """Ensure save as actually creates a new person"""
+        post_data = {'_saveasnew':'', 'name':'John M', 'gender':1}
+        response = self.client.post('/test_admin/admin/admin_views/person/1/', 
post_data)
+        self.assertEqual(len(Person.objects.filter(name='John M')), 1)
+        self.assertEqual(len(Person.objects.filter(id=1)), 1)
+    
+    def test_save_as_display(self):
+        """
+        Ensure that 'save as' is displayed when activated and after submitting
+        invalid data aside save_as_new will not show us a form to overwrite the
+        initial model.
+        """
+        response = self.client.get('/test_admin/admin/admin_views/person/1/')
+        self.assert_(response.context['save_as'])
+        post_data = {'_saveasnew':'', 'name':'John M', 'gender':3, 
'alive':'checked'}
+        response = self.client.post('/test_admin/admin/admin_views/person/1/', 
post_data)
+        self.assertEqual(response.context['form_url'], '../add/')
+
 class CustomModelAdminTest(AdminViewBasicTest):
     urlbit = "admin2"
 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to