summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-05-03 13:52:39 +0000
committerJannis Leidel <jannis@leidel.info>2011-05-03 13:52:39 +0000
commit05b4f2ebc2f547d2413f738551f9933aae0d34dc (patch)
tree7b004559cdfbdf094f7cd7a1f3f80df3aeefe338
parent950e05c3ff5daa360c3bddb84831d40b167062f1 (diff)
Corrected the behavior of the SimpleFilter.lookups method to also be able to return None. Also modified example in documentation to be a bite more realistic. Refs #5833. Thanks for the hint, Martin Mahner.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16150 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/filters.py5
-rw-r--r--docs/ref/contrib/admin/index.txt15
-rw-r--r--tests/regressiontests/admin_filters/tests.py19
3 files changed, 29 insertions, 10 deletions
diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py
index 0e3e2e504c..36dcea1ea7 100644
--- a/django/contrib/admin/filters.py
+++ b/django/contrib/admin/filters.py
@@ -63,7 +63,10 @@ class SimpleListFilter(ListFilter):
raise ImproperlyConfigured(
"The list filter '%s' does not specify "
"a 'parameter_name'." % self.__class__.__name__)
- self.lookup_choices = self.lookups(request)
+ lookup_choices = self.lookups(request)
+ if lookup_choices is None:
+ lookup_choices = ()
+ self.lookup_choices = lookup_choices
def has_output(self):
return len(self.lookup_choices) > 0
diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt
index 0d28cc48ff..e8bc59724d 100644
--- a/docs/ref/contrib/admin/index.txt
+++ b/docs/ref/contrib/admin/index.txt
@@ -607,15 +607,12 @@ subclass::
class AuthDecadeBornListFilter(DecadeBornListFilter):
def lookups(self, request):
- if request.user.is_authenticated():
- return (
- ('80s', 'in the eighties'),
- ('other', 'other'),
- )
- else:
- return (
- ('90s', 'in the nineties'),
- )
+ if request.user.is_superuser:
+ return super(AuthDecadeBornListFilter, self).lookups(request)
+
+ def queryset(self, request, queryset):
+ if request.user.is_superuser:
+ return super(AuthDecadeBornListFilter, self).queryset(request, queryset)
* a tuple, where the first element is a field name and the second
element is a class inheriting from
diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
index b1bd6ded5f..6b32475a64 100644
--- a/tests/regressiontests/admin_filters/tests.py
+++ b/tests/regressiontests/admin_filters/tests.py
@@ -43,6 +43,11 @@ class DecadeListFilterWithoutTitle(DecadeListFilter):
class DecadeListFilterWithoutParameter(DecadeListFilter):
title = 'publication decade'
+class DecadeListFilterWithNoneReturningLookups(DecadeListFilterWithTitleAndParameter):
+
+ def lookups(self, request):
+ pass
+
class CustomUserAdmin(UserAdmin):
list_filter = ('books_authored', 'books_contributed')
@@ -60,6 +65,9 @@ class DecadeFilterBookAdminWithoutTitle(ModelAdmin):
class DecadeFilterBookAdminWithoutParameter(ModelAdmin):
list_filter = (DecadeListFilterWithoutParameter,)
+class DecadeFilterBookAdminWithNoneReturningLookups(ModelAdmin):
+ list_filter = (DecadeListFilterWithNoneReturningLookups,)
+
class ListFiltersTests(TestCase):
def setUp(self):
@@ -453,3 +461,14 @@ class ListFiltersTests(TestCase):
self.assertRaisesRegexp(ImproperlyConfigured,
"The list filter 'DecadeListFilterWithoutParameter' does not specify a 'parameter_name'.",
self.get_changelist, request, Book, modeladmin)
+
+ def test_simplelistfilter_with_none_returning_lookups(self):
+ """
+ A SimpleListFilter lookups method can return None but disables the
+ filter completely.
+ """
+ modeladmin = DecadeFilterBookAdminWithNoneReturningLookups(Book, site)
+ request = self.request_factory.get('/', {})
+ changelist = self.get_changelist(request, Book, modeladmin)
+ filterspec = changelist.get_filters(request)[0]
+ self.assertEqual(len(filterspec), 0)