summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-01-02 01:32:40 +0000
committerJannis Leidel <jannis@leidel.info>2011-01-02 01:32:40 +0000
commit7a89d3d503cad96689fee3028a218ff5456f73f1 (patch)
treed4c583288789091f9379736c41098065701d215c
parentbe56f74f93e97118dca32d83697803e3f9f42db0 (diff)
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
-rw-r--r--django/contrib/admin/options.py7
-rw-r--r--django/contrib/admin/views/main.py5
-rw-r--r--tests/regressiontests/admin_views/tests.py18
3 files changed, 25 insertions, 5 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 6fd14d83d4..d1f02be843 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -535,7 +535,8 @@ class ModelAdmin(BaseModelAdmin):
"""
# If self.actions is explicitally set to None that means that we don't
# want *any* actions enabled on this page.
- if self.actions is None:
+ from django.contrib.admin.views.main import IS_POPUP_VAR
+ if self.actions is None or IS_POPUP_VAR in request.GET:
return []
actions = []
@@ -1081,7 +1082,7 @@ class ModelAdmin(BaseModelAdmin):
formset = cl.formset = None
# Handle POSTed bulk-edit data.
- if (request.method == "POST" and self.list_editable and
+ if (request.method == "POST" and cl.list_editable and
'_save' in request.POST and not action_failed):
FormSet = self.get_changelist_formset(request)
formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
@@ -1111,7 +1112,7 @@ class ModelAdmin(BaseModelAdmin):
return HttpResponseRedirect(request.get_full_path())
# Handle GET -- construct a formset for display.
- elif self.list_editable:
+ elif cl.list_editable:
FormSet = self.get_changelist_formset(request)
formset = cl.formset = FormSet(queryset=cl.result_list)
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 0b98f11a49..886ccd9be7 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -39,7 +39,6 @@ class ChangeList(object):
self.search_fields = search_fields
self.list_select_related = list_select_related
self.list_per_page = list_per_page
- self.list_editable = list_editable
self.model_admin = model_admin
# Get search parameters from the query string.
@@ -58,6 +57,10 @@ class ChangeList(object):
if ERROR_FLAG in self.params:
del self.params[ERROR_FLAG]
+ if self.is_popup:
+ self.list_editable = ()
+ else:
+ self.list_editable = list_editable
self.order_field, self.order_type = self.get_ordering()
self.query = request.GET.get(SEARCH_VAR, '')
self.query_set = self.get_query_set()
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 75c6698db1..eb35b41860 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -16,6 +16,7 @@ from django.contrib.admin.models import LogEntry, DELETION
from django.contrib.admin.sites import LOGIN_FORM_KEY
from django.contrib.admin.util import quote
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
+from django.contrib.admin.views.main import IS_POPUP_VAR
from django.forms.util import ErrorList
import django.template.context
from django.test import TestCase
@@ -1450,7 +1451,14 @@ class AdminViewListEditable(TestCase):
self.assertEqual(Person.objects.get(name="John Mauchly").alive, False)
self.assertEqual(Person.objects.get(name="Grace Hopper").gender, 2)
-
+ def test_list_editable_popup(self):
+ """
+ Fields should not be list-editable in popups.
+ """
+ response = self.client.get('/test_admin/admin/admin_views/person/')
+ self.assertNotEqual(response.context['cl'].list_editable, ())
+ response = self.client.get('/test_admin/admin/admin_views/person/?%s' % IS_POPUP_VAR)
+ self.assertEqual(response.context['cl'].list_editable, ())
class AdminSearchTest(TestCase):
@@ -1701,6 +1709,14 @@ class AdminActionsTest(TestCase):
response = self.client.get('/test_admin/admin/admin_views/subscriber/')
self.assertContains(response, '0 of 2 selected')
+ def test_popup_actions(self):
+ """ Actions should not be shown in popups. """
+ response = self.client.get('/test_admin/admin/admin_views/subscriber/')
+ self.assertNotEquals(response.context["action_form"], None)
+ response = self.client.get(
+ '/test_admin/admin/admin_views/subscriber/?%s' % IS_POPUP_VAR)
+ self.assertEquals(response.context["action_form"], None)
+
class TestCustomChangeList(TestCase):
fixtures = ['admin-views-users.xml']