diff --git a/django/contrib/auth/admin.py b/django/contrib/auth/admin.py index 61bae28052..497e9b9f46 100644 --- a/django/contrib/auth/admin.py +++ b/django/contrib/auth/admin.py @@ -1,4 +1,3 @@ -from django import template from django.db import transaction from django.conf import settings from django.contrib import admin @@ -137,6 +136,17 @@ class UserAdmin(admin.ModelAdmin): 'root_path': self.admin_site.root_path, }, context_instance=RequestContext(request)) + def response_add(self, request, obj, post_url_continue='../%s/'): + """ + Determines the HttpResponse for the add_view stage. It mostly defers to + its superclass implementation but is customized because the User model + has a slightly different workflow. + """ + if '_addanother' not in request.POST: + # The 'Save' button should act like the 'Save and continue + # editing' button + request.POST['_continue'] = 1 + return super(UserAdmin, self).response_add(request, obj, post_url_continue) admin.site.register(Group, GroupAdmin) admin.site.register(User, UserAdmin) diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index c0e1e506d1..4c96306332 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -18,7 +18,7 @@ from django.utils import formats from django.utils.cache import get_max_age from django.utils.encoding import iri_to_uri from django.utils.html import escape -from django.utils.translation import get_date_formats, activate, deactivate +from django.utils.translation import activate, deactivate from django.utils import unittest # local test models @@ -1538,7 +1538,7 @@ class AdminActionsTest(TestCase): def test_action_column_class(self): "Tests that the checkbox column class is present in the response" response = self.client.get('/test_admin/admin/admin_views/subscriber/') - self.assertNotEquals(response.context["action_form"], None) + self.assertNotEqual(response.context["action_form"], None) self.assert_('action-checkbox-column' in response.content, "Expected an action-checkbox-column in response") @@ -2164,7 +2164,19 @@ class UserAdminTest(TestCase): def tearDown(self): self.client.logout() - def test_user_creation(self): + def test_save_button(self): + user_count = User.objects.count() + response = self.client.post('/test_admin/admin/auth/user/add/', { + 'username': 'newuser', + 'password1': 'newpassword', + 'password2': 'newpassword', + }) + new_user = User.objects.order_by('-id')[0] + self.assertRedirects(response, '/test_admin/admin/auth/user/%s/' % new_user.pk) + self.assertEqual(User.objects.count(), user_count + 1) + self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD) + + def test_save_continue_editing_button(self): user_count = User.objects.count() response = self.client.post('/test_admin/admin/auth/user/add/', { 'username': 'newuser', @@ -2174,8 +2186,8 @@ class UserAdminTest(TestCase): }) new_user = User.objects.order_by('-id')[0] self.assertRedirects(response, '/test_admin/admin/auth/user/%s/' % new_user.pk) - self.assertEquals(User.objects.count(), user_count + 1) - self.assertNotEquals(new_user.password, UNUSABLE_PASSWORD) + self.assertEqual(User.objects.count(), user_count + 1) + self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD) def test_password_mismatch(self): response = self.client.post('/test_admin/admin/auth/user/add/', { @@ -2183,21 +2195,22 @@ class UserAdminTest(TestCase): 'password1': 'newpassword', 'password2': 'mismatch', }) - self.assertEquals(response.status_code, 200) + self.assertEqual(response.status_code, 200) adminform = response.context['adminform'] - self.assert_('password' not in adminform.form.errors) - self.assertEquals(adminform.form.errors['password2'], + self.assertTrue('password' not in adminform.form.errors) + self.assertEqual(adminform.form.errors['password2'], [u"The two password fields didn't match."]) def test_user_fk_popup(self): response = self.client.get('/test_admin/admin/admin_views/album/add/') - self.failUnlessEqual(response.status_code, 200) + self.assertEqual(response.status_code, 200) self.assertContains(response, '/test_admin/admin/auth/user/add') self.assertContains(response, 'class="add-another" id="add_id_owner" onclick="return showAddAnotherPopup(this);"') response = self.client.get('/test_admin/admin/auth/user/add/?_popup=1') self.assertNotContains(response, 'name="_continue"') + self.assertNotContains(response, 'name="_addanother"') - def test_user_add_another(self): + def test_save_add_another_button(self): user_count = User.objects.count() response = self.client.post('/test_admin/admin/auth/user/add/', { 'username': 'newuser', @@ -2207,8 +2220,8 @@ class UserAdminTest(TestCase): }) new_user = User.objects.order_by('-id')[0] self.assertRedirects(response, '/test_admin/admin/auth/user/add/') - self.assertEquals(User.objects.count(), user_count + 1) - self.assertNotEquals(new_user.password, UNUSABLE_PASSWORD) + self.assertEqual(User.objects.count(), user_count + 1) + self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD) try: import docutils