summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-09-08 13:25:00 +0000
committerJannis Leidel <jannis@leidel.info>2011-09-08 13:25:00 +0000
commitcf70c96ce08bec8834ada695451cc915f7558dbd (patch)
tree5ccf9d96d88a692f161f64bd515e78ea95da7a3e /django
parent414c762c3abfebb2670a3b26aba7028d62303cfe (diff)
Fixed #15997 -- Added `list_max_show_all` option to `ModelAdmin` in replacement for a global module level variable. Thanks, jsdalton.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16725 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/options.py3
-rw-r--r--django/contrib/admin/validation.py5
-rw-r--r--django/contrib/admin/views/main.py9
3 files changed, 10 insertions, 7 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index cf7ea83c11..c9f2562142 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -278,6 +278,7 @@ class ModelAdmin(BaseModelAdmin):
list_filter = ()
list_select_related = False
list_per_page = 100
+ list_max_show_all = 200
list_editable = ()
search_fields = ()
date_hierarchy = None
@@ -1087,7 +1088,7 @@ class ModelAdmin(BaseModelAdmin):
try:
cl = ChangeList(request, self.model, list_display, self.list_display_links,
self.list_filter, self.date_hierarchy, self.search_fields,
- self.list_select_related, self.list_per_page, self.list_editable, self)
+ self.list_select_related, self.list_per_page, self.list_max_show_all, self.list_editable, self)
except IncorrectLookupParameters:
# Wacky lookup parameters were given, so redirect to the main
# changelist page, without parameters, and pass an 'invalid=1'
diff --git a/django/contrib/admin/validation.py b/django/contrib/admin/validation.py
index 9a0c948120..733f89d06f 100644
--- a/django/contrib/admin/validation.py
+++ b/django/contrib/admin/validation.py
@@ -96,6 +96,11 @@ def validate(cls, model):
raise ImproperlyConfigured("'%s.list_per_page' should be a integer."
% cls.__name__)
+ # list_max_show_all
+ if hasattr(cls, 'list_max_show_all') and not isinstance(cls.list_max_show_all, int):
+ raise ImproperlyConfigured("'%s.list_max_show_all' should be an integer."
+ % cls.__name__)
+
# list_editable
if hasattr(cls, 'list_editable') and cls.list_editable:
check_isseq(cls, 'list_editable', cls.list_editable)
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index f741fd0764..616b24957a 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -12,10 +12,6 @@ from django.contrib.admin import FieldListFilter
from django.contrib.admin.options import IncorrectLookupParameters
from django.contrib.admin.util import quote, get_fields_from_path
-# The system will display a "Show all" link on the change list only if the
-# total result count is less than or equal to this setting.
-MAX_SHOW_ALL_ALLOWED = 200
-
# Changelist settings
ALL_VAR = 'all'
ORDER_VAR = 'o'
@@ -44,7 +40,7 @@ def field_needs_distinct(field):
class ChangeList(object):
def __init__(self, request, model, list_display, list_display_links,
list_filter, date_hierarchy, search_fields, list_select_related,
- list_per_page, list_editable, model_admin):
+ list_per_page, list_max_show_all, list_editable, model_admin):
self.model = model
self.opts = model._meta
self.lookup_opts = self.opts
@@ -56,6 +52,7 @@ class ChangeList(object):
self.search_fields = search_fields
self.list_select_related = list_select_related
self.list_per_page = list_per_page
+ self.list_max_show_all = list_max_show_all
self.model_admin = model_admin
# Get search parameters from the query string.
@@ -145,7 +142,7 @@ class ChangeList(object):
else:
full_result_count = self.root_query_set.count()
- can_show_all = result_count <= MAX_SHOW_ALL_ALLOWED
+ can_show_all = result_count <= self.list_max_show_all
multi_page = result_count > self.list_per_page
# Get the list of objects to display on this page.