diff --git a/AUTHORS b/AUTHORS index 7bb1408d5f..c00e20c7d0 100644 --- a/AUTHORS +++ b/AUTHORS @@ -394,6 +394,7 @@ answer newbie questions, and generally made Django that much better: Ben Slavin sloonz SmileyChris + Paul Smith Warren Smith smurf@smurf.noris.de Vsevolod Solovyov diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 6fa8f5c8dd..a230416152 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -689,6 +689,9 @@ class ModelAdmin(BaseModelAdmin): # perform an action on it, so bail. selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) if not selected: + # Reminder that something needs to be selected or nothing will happen + msg = "Items must be selected in order to perform actions on them. No items have been changed." + self.message_user(request, _(msg)) return None response = func(self, request, queryset.filter(pk__in=selected)) @@ -700,6 +703,9 @@ class ModelAdmin(BaseModelAdmin): return response else: return HttpResponseRedirect(".") + else: + msg = "No action selected." + self.message_user(request, _(msg)) def add_view(self, request, form_url='', extra_context=None): "The 'add' admin view for this model." diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index f18e578d3f..bdc0c0376d 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -1156,7 +1156,6 @@ class AdminActionsTest(TestCase): self.assert_('action-checkbox-column' in response.content, "Expected an action-checkbox-column in response") - def test_multiple_actions_form(self): """ Test that actions come from the form whose submit button was pressed (#10618). @@ -1174,6 +1173,35 @@ class AdminActionsTest(TestCase): self.assertEquals(len(mail.outbox), 1) self.assertEquals(mail.outbox[0].subject, 'Greetings from a function action') + def test_user_message_on_none_selected(self): + """ + User should see a warning when 'Go' is pressed and no items are selected. + """ + action_data = { + ACTION_CHECKBOX_NAME: [], + 'action' : 'delete_selected', + 'index': 0, + } + response = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data) + msg = """Items must be selected in order to perform actions on them. No items have been changed.""" + self.assertContains(response, msg) + self.failUnlessEqual(Subscriber.objects.count(), 2) + + def test_user_message_on_no_action(self): + """ + User should see a warning when 'Go' is pressed and no action is selected. + """ + action_data = { + ACTION_CHECKBOX_NAME: [1, 2], + 'action' : '', + 'index': 0, + } + response = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data) + msg = """No action selected.""" + self.assertContains(response, msg) + self.failUnlessEqual(Subscriber.objects.count(), 2) + + class TestInlineNotEditable(TestCase): fixtures = ['admin-views-users.xml']