diff options
| author | Julien Phalip <jphalip@gmail.com> | 2012-11-25 20:39:23 +0100 |
|---|---|---|
| committer | Julien Phalip <jphalip@gmail.com> | 2012-11-25 20:39:23 +0100 |
| commit | ae206d78f6d991e1d7ea1c1bb8bd85f4658c0877 (patch) | |
| tree | 8a2c80bc5f3ab4fe8bdca47976768f57e7caeca8 /tests | |
| parent | f26b956e807b7d5603e4a80533e3a12fd625a605 (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.py | 12 | ||||
| -rw-r--r-- | tests/regressiontests/admin_changelist/tests.py | 25 |
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')) |
