summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorStanislas Guerra <stanislas.guerra@gmail.com>2014-05-21 12:32:19 +0200
committerTim Graham <timograham@gmail.com>2014-08-04 09:39:02 -0400
commit98e8da3709e400d549e87c7ff1450a2685c0adcf (patch)
treed2532acc84686fdff908807998487d46841e9ef8 /tests
parentbf5382c6e549d78da9f7029cd86686459b52eaed (diff)
Fixed #16311 -- Added a RelatedOnlyFieldListFilter class in admin.filters.
Diffstat (limited to 'tests')
-rw-r--r--tests/admin_filters/tests.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py
index 17c67929dc..23c6c10319 100644
--- a/tests/admin_filters/tests.py
+++ b/tests/admin_filters/tests.py
@@ -3,7 +3,7 @@ from __future__ import unicode_literals
import datetime
from django.contrib.admin import (site, ModelAdmin, SimpleListFilter,
- BooleanFieldListFilter, AllValuesFieldListFilter)
+ BooleanFieldListFilter, AllValuesFieldListFilter, RelatedOnlyFieldListFilter)
from django.contrib.admin.views.main import ChangeList
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
@@ -134,6 +134,15 @@ class BookAdminWithUnderscoreLookupAndTuple(BookAdmin):
list_filter = ('year', ('author__email', AllValuesFieldListFilter), 'contributors', 'is_best_seller', 'date_registered', 'no')
+class BookAdminRelatedOnlyFilter(ModelAdmin):
+ list_filter = (
+ 'year', 'is_best_seller', 'date_registered', 'no',
+ ('author', RelatedOnlyFieldListFilter),
+ ('contributors', RelatedOnlyFieldListFilter),
+ )
+ ordering = ('-id',)
+
+
class DecadeFilterBookAdmin(ModelAdmin):
list_filter = ('author', DecadeListFilterWithTitleAndParameter)
ordering = ('-id',)
@@ -359,6 +368,13 @@ class ListFiltersTests(TestCase):
def test_relatedfieldlistfilter_foreignkey(self):
modeladmin = BookAdmin(Book, site)
+ request = self.request_factory.get('/')
+ changelist = self.get_changelist(request, Book, modeladmin)
+
+ # Make sure that all users are present in the author's list filter
+ filterspec = changelist.get_filters(request)[0][1]
+ self.assertEqual(filterspec.lookup_choices, [(1, 'alfred'), (2, 'bob'), (3, 'lisa')])
+
request = self.request_factory.get('/', {'author__isnull': 'True'})
changelist = self.get_changelist(request, Book, modeladmin)
@@ -387,6 +403,13 @@ class ListFiltersTests(TestCase):
def test_relatedfieldlistfilter_manytomany(self):
modeladmin = BookAdmin(Book, site)
+ request = self.request_factory.get('/')
+ changelist = self.get_changelist(request, Book, modeladmin)
+
+ # Make sure that all users are present in the contrib's list filter
+ filterspec = changelist.get_filters(request)[0][2]
+ self.assertEqual(filterspec.lookup_choices, [(1, 'alfred'), (2, 'bob'), (3, 'lisa')])
+
request = self.request_factory.get('/', {'contributors__isnull': 'True'})
changelist = self.get_changelist(request, Book, modeladmin)
@@ -464,6 +487,26 @@ class ListFiltersTests(TestCase):
self.assertEqual(choice['selected'], True)
self.assertEqual(choice['query_string'], '?books_contributed__id__exact=%d' % self.django_book.pk)
+ def test_relatedonlyfieldlistfilter_foreignkey(self):
+ modeladmin = BookAdminRelatedOnlyFilter(Book, site)
+
+ request = self.request_factory.get('/')
+ changelist = self.get_changelist(request, Book, modeladmin)
+
+ # Make sure that only actual authors are present in author's list filter
+ filterspec = changelist.get_filters(request)[0][1]
+ self.assertEqual(filterspec.lookup_choices, [(1, 'alfred'), (2, 'bob')])
+
+ def test_relatedonlyfieldlistfilter_manytomany(self):
+ modeladmin = BookAdminRelatedOnlyFilter(Book, site)
+
+ request = self.request_factory.get('/')
+ changelist = self.get_changelist(request, Book, modeladmin)
+
+ # Make sure that only actual contributors are present in contrib's list filter
+ filterspec = changelist.get_filters(request)[0][2]
+ self.assertEqual(filterspec.lookup_choices, [(2, 'bob'), (3, 'lisa')])
+
def test_booleanfieldlistfilter(self):
modeladmin = BookAdmin(Book, site)
self.verify_booleanfieldlistfilter(modeladmin)