Loading django/contrib/admin/options.py +20 −7 Original line number Diff line number Diff line import copy from functools import update_wrapper, partial import warnings from django import forms from django.conf import settings Loading Loading @@ -824,7 +823,7 @@ class ModelAdmin(BaseModelAdmin): else: msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg) return self.response_post_save(request, obj) return self.response_post_save_add(request, obj) def response_change(self, request, obj): """ Loading Loading @@ -858,13 +857,27 @@ class ModelAdmin(BaseModelAdmin): else: msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg) return self.response_post_save(request, obj) return self.response_post_save_change(request, obj) def response_post_save(self, request, obj): def response_post_save_add(self, request, obj): """ Figure out where to redirect after the 'Save' button has been pressed. If the user has change permission, redirect to the change-list page for this object. Otherwise, redirect to the admin index. Figure out where to redirect after the 'Save' button has been pressed when adding a new object. """ opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.module_name), current_app=self.admin_site.name) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url) def response_post_save_change(self, request, obj): """ Figure out where to redirect after the 'Save' button has been pressed when editing an existing object. """ opts = self.model._meta if self.has_change_permission(request, None): Loading tests/regressiontests/admin_custom_urls/models.py +5 −1 Original line number Diff line number Diff line Loading @@ -56,10 +56,14 @@ class Person(models.Model): class PersonAdmin(admin.ModelAdmin): def response_post_save(self, request, obj): def response_post_save_add(self, request, obj): return HttpResponseRedirect( reverse('admin:admin_custom_urls_person_history', args=[obj.pk])) def response_post_save_change(self, request, obj): return HttpResponseRedirect( reverse('admin:admin_custom_urls_person_delete', args=[obj.pk])) class Car(models.Model): name = models.CharField(max_length=20) Loading tests/regressiontests/admin_custom_urls/tests.py +20 −3 Original line number Diff line number Diff line Loading @@ -94,10 +94,11 @@ class CustomRedirects(TestCase): def tearDown(self): self.client.logout() def test_post_save_redirect(self): def test_post_save_add_redirect(self): """ Ensures that ModelAdmin.response_post_save() controls the redirection after the 'Save' button has been pressed. Ensures that ModelAdmin.response_post_save_add() controls the redirection after the 'Save' button has been pressed when adding a new object. Refs 8001, 18310, 19505. """ post_data = { 'name': 'John Doe', } Loading @@ -109,6 +110,22 @@ class CustomRedirects(TestCase): self.assertRedirects( response, reverse('admin:admin_custom_urls_person_history', args=[persons[0].pk])) def test_post_save_change_redirect(self): """ Ensures that ModelAdmin.response_post_save_change() controls the redirection after the 'Save' button has been pressed when editing an existing object. Refs 8001, 18310, 19505. """ Person.objects.create(name='John Doe') self.assertEqual(Person.objects.count(), 1) person = Person.objects.all()[0] post_data = { 'name': 'Jack Doe', } response = self.client.post( reverse('admin:admin_custom_urls_person_change', args=[person.pk]), post_data) self.assertRedirects( response, reverse('admin:admin_custom_urls_person_delete', args=[person.pk])) def test_post_url_continue(self): """ Ensures that the ModelAdmin.response_add()'s parameter `post_url_continue` Loading Loading
django/contrib/admin/options.py +20 −7 Original line number Diff line number Diff line import copy from functools import update_wrapper, partial import warnings from django import forms from django.conf import settings Loading Loading @@ -824,7 +823,7 @@ class ModelAdmin(BaseModelAdmin): else: msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg) return self.response_post_save(request, obj) return self.response_post_save_add(request, obj) def response_change(self, request, obj): """ Loading Loading @@ -858,13 +857,27 @@ class ModelAdmin(BaseModelAdmin): else: msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg) return self.response_post_save(request, obj) return self.response_post_save_change(request, obj) def response_post_save(self, request, obj): def response_post_save_add(self, request, obj): """ Figure out where to redirect after the 'Save' button has been pressed. If the user has change permission, redirect to the change-list page for this object. Otherwise, redirect to the admin index. Figure out where to redirect after the 'Save' button has been pressed when adding a new object. """ opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.module_name), current_app=self.admin_site.name) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url) def response_post_save_change(self, request, obj): """ Figure out where to redirect after the 'Save' button has been pressed when editing an existing object. """ opts = self.model._meta if self.has_change_permission(request, None): Loading
tests/regressiontests/admin_custom_urls/models.py +5 −1 Original line number Diff line number Diff line Loading @@ -56,10 +56,14 @@ class Person(models.Model): class PersonAdmin(admin.ModelAdmin): def response_post_save(self, request, obj): def response_post_save_add(self, request, obj): return HttpResponseRedirect( reverse('admin:admin_custom_urls_person_history', args=[obj.pk])) def response_post_save_change(self, request, obj): return HttpResponseRedirect( reverse('admin:admin_custom_urls_person_delete', args=[obj.pk])) class Car(models.Model): name = models.CharField(max_length=20) Loading
tests/regressiontests/admin_custom_urls/tests.py +20 −3 Original line number Diff line number Diff line Loading @@ -94,10 +94,11 @@ class CustomRedirects(TestCase): def tearDown(self): self.client.logout() def test_post_save_redirect(self): def test_post_save_add_redirect(self): """ Ensures that ModelAdmin.response_post_save() controls the redirection after the 'Save' button has been pressed. Ensures that ModelAdmin.response_post_save_add() controls the redirection after the 'Save' button has been pressed when adding a new object. Refs 8001, 18310, 19505. """ post_data = { 'name': 'John Doe', } Loading @@ -109,6 +110,22 @@ class CustomRedirects(TestCase): self.assertRedirects( response, reverse('admin:admin_custom_urls_person_history', args=[persons[0].pk])) def test_post_save_change_redirect(self): """ Ensures that ModelAdmin.response_post_save_change() controls the redirection after the 'Save' button has been pressed when editing an existing object. Refs 8001, 18310, 19505. """ Person.objects.create(name='John Doe') self.assertEqual(Person.objects.count(), 1) person = Person.objects.all()[0] post_data = { 'name': 'Jack Doe', } response = self.client.post( reverse('admin:admin_custom_urls_person_change', args=[person.pk]), post_data) self.assertRedirects( response, reverse('admin:admin_custom_urls_person_delete', args=[person.pk])) def test_post_url_continue(self): """ Ensures that the ModelAdmin.response_add()'s parameter `post_url_continue` Loading