Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7a89d3d

Browse files
committed
Fixed #11700 -- Stopped admin actions and list_editable fields to show up in popups. Thanks to Simon Meers for the initial patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15129 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent be56f74 commit 7a89d3d

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

django/contrib/admin/options.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,8 @@ def get_actions(self, request):
535535
"""
536536
# If self.actions is explicitally set to None that means that we don't
537537
# want *any* actions enabled on this page.
538-
if self.actions is None:
538+
from django.contrib.admin.views.main import IS_POPUP_VAR
539+
if self.actions is None or IS_POPUP_VAR in request.GET:
539540
return []
540541

541542
actions = []
@@ -1081,7 +1082,7 @@ def changelist_view(self, request, extra_context=None):
10811082
formset = cl.formset = None
10821083

10831084
# Handle POSTed bulk-edit data.
1084-
if (request.method == "POST" and self.list_editable and
1085+
if (request.method == "POST" and cl.list_editable and
10851086
'_save' in request.POST and not action_failed):
10861087
FormSet = self.get_changelist_formset(request)
10871088
formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
@@ -1111,7 +1112,7 @@ def changelist_view(self, request, extra_context=None):
11111112
return HttpResponseRedirect(request.get_full_path())
11121113

11131114
# Handle GET -- construct a formset for display.
1114-
elif self.list_editable:
1115+
elif cl.list_editable:
11151116
FormSet = self.get_changelist_formset(request)
11161117
formset = cl.formset = FormSet(queryset=cl.result_list)
11171118

django/contrib/admin/views/main.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ def __init__(self, request, model, list_display, list_display_links, list_filter
3939
self.search_fields = search_fields
4040
self.list_select_related = list_select_related
4141
self.list_per_page = list_per_page
42-
self.list_editable = list_editable
4342
self.model_admin = model_admin
4443

4544
# Get search parameters from the query string.
@@ -58,6 +57,10 @@ def __init__(self, request, model, list_display, list_display_links, list_filter
5857
if ERROR_FLAG in self.params:
5958
del self.params[ERROR_FLAG]
6059

60+
if self.is_popup:
61+
self.list_editable = ()
62+
else:
63+
self.list_editable = list_editable
6164
self.order_field, self.order_type = self.get_ordering()
6265
self.query = request.GET.get(SEARCH_VAR, '')
6366
self.query_set = self.get_query_set()

tests/regressiontests/admin_views/tests.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from django.contrib.admin.sites import LOGIN_FORM_KEY
1717
from django.contrib.admin.util import quote
1818
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
19+
from django.contrib.admin.views.main import IS_POPUP_VAR
1920
from django.forms.util import ErrorList
2021
import django.template.context
2122
from django.test import TestCase
@@ -1450,7 +1451,14 @@ def test_list_editable_action_choices(self):
14501451
self.assertEqual(Person.objects.get(name="John Mauchly").alive, False)
14511452
self.assertEqual(Person.objects.get(name="Grace Hopper").gender, 2)
14521453

1453-
1454+
def test_list_editable_popup(self):
1455+
"""
1456+
Fields should not be list-editable in popups.
1457+
"""
1458+
response = self.client.get('/test_admin/admin/admin_views/person/')
1459+
self.assertNotEqual(response.context['cl'].list_editable, ())
1460+
response = self.client.get('/test_admin/admin/admin_views/person/?%s' % IS_POPUP_VAR)
1461+
self.assertEqual(response.context['cl'].list_editable, ())
14541462

14551463

14561464
class AdminSearchTest(TestCase):
@@ -1701,6 +1709,14 @@ def test_selection_counter(self):
17011709
response = self.client.get('/test_admin/admin/admin_views/subscriber/')
17021710
self.assertContains(response, '0 of 2 selected')
17031711

1712+
def test_popup_actions(self):
1713+
""" Actions should not be shown in popups. """
1714+
response = self.client.get('/test_admin/admin/admin_views/subscriber/')
1715+
self.assertNotEquals(response.context["action_form"], None)
1716+
response = self.client.get(
1717+
'/test_admin/admin/admin_views/subscriber/?%s' % IS_POPUP_VAR)
1718+
self.assertEquals(response.context["action_form"], None)
1719+
17041720

17051721
class TestCustomChangeList(TestCase):
17061722
fixtures = ['admin-views-users.xml']

0 commit comments

Comments
 (0)