summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2012-11-25 20:39:23 +0100
committerJulien Phalip <jphalip@gmail.com>2012-11-25 20:39:23 +0100
commitae206d78f6d991e1d7ea1c1bb8bd85f4658c0877 (patch)
tree8a2c80bc5f3ab4fe8bdca47976768f57e7caeca8 /tests
parentf26b956e807b7d5603e4a80533e3a12fd625a605 (diff)
Fixed #17646 -- Added a get_list_filter() method to ModelAdmin. Thanks to rasca for the suggestion and to mateusgondim for the patch.
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/admin_changelist/admin.py12
-rw-r--r--tests/regressiontests/admin_changelist/tests.py25
2 files changed, 36 insertions, 1 deletions
diff --git a/tests/regressiontests/admin_changelist/admin.py b/tests/regressiontests/admin_changelist/admin.py
index 9ecfbc6e12..5751d04bce 100644
--- a/tests/regressiontests/admin_changelist/admin.py
+++ b/tests/regressiontests/admin_changelist/admin.py
@@ -32,6 +32,7 @@ class ParentAdmin(admin.ModelAdmin):
class ChildAdmin(admin.ModelAdmin):
list_display = ['name', 'parent']
list_per_page = 10
+ list_filter = ['parent', 'age']
def queryset(self, request):
return super(ChildAdmin, self).queryset(request).select_related("parent__name")
@@ -90,3 +91,14 @@ class SwallowAdmin(admin.ModelAdmin):
list_display = ('origin', 'load', 'speed')
site.register(Swallow, SwallowAdmin)
+
+class DynamicListFilterChildAdmin(admin.ModelAdmin):
+ list_filter = ('parent', 'name', 'age')
+
+ def get_list_filter(self, request):
+ my_list_filter = super(DynamicListFilterChildAdmin, self).get_list_filter(request)
+ if request.user.username == 'noparents':
+ my_list_filter = list(my_list_filter)
+ my_list_filter.remove('parent')
+ return my_list_filter
+
diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py
index 2b1c1a9bcf..e8d4cbff16 100644
--- a/tests/regressiontests/admin_changelist/tests.py
+++ b/tests/regressiontests/admin_changelist/tests.py
@@ -17,7 +17,7 @@ from .admin import (ChildAdmin, QuartetAdmin, BandAdmin, ChordsBandAdmin,
GroupAdmin, ParentAdmin, DynamicListDisplayChildAdmin,
DynamicListDisplayLinksChildAdmin, CustomPaginationAdmin,
FilteredChildAdmin, CustomPaginator, site as custom_site,
- SwallowAdmin)
+ SwallowAdmin, DynamicListFilterChildAdmin)
from .models import (Event, Child, Parent, Genre, Band, Musician, Group,
Quartet, Membership, ChordsMusician, ChordsBand, Invitation, Swallow,
UnorderedObject, OrderedObject)
@@ -541,3 +541,26 @@ class ChangeListTests(TestCase):
check_results_order()
OrderedObjectAdmin.ordering = ['id', 'bool']
check_results_order(ascending=True)
+
+ def test_dynamic_list_filter(self):
+ """
+ Regression tests for ticket #17646: dynamic list_filter support.
+ """
+ parent = Parent.objects.create(name='parent')
+ for i in range(10):
+ Child.objects.create(name='child %s' % i, parent=parent)
+
+ user_noparents = self._create_superuser('noparents')
+ user_parents = self._create_superuser('parents')
+
+ # Test with user 'noparents'
+ m = DynamicListFilterChildAdmin(Child, admin.site)
+ request = self._mocked_authenticated_request('/child/', user_noparents)
+ response = m.changelist_view(request)
+ self.assertEqual(response.context_data['cl'].list_filter, ['name', 'age'])
+
+ # Test with user 'parents'
+ m = DynamicListFilterChildAdmin(Child, admin.site)
+ request = self._mocked_authenticated_request('/child/', user_parents)
+ response = m.changelist_view(request)
+ self.assertEqual(response.context_data['cl'].list_filter, ('parent', 'name', 'age'))