diff options
author | Shreya Bamne <shreya.bamne@gmail.com> | 2021-12-08 15:24:55 +0100 |
---|---|---|
committer | Carlton Gibson <carlton.gibson@noumenal.es> | 2021-12-08 15:25:52 +0100 |
commit | 8a4e5067605e608c3fcbb5ca11e0019eac8b40aa (patch) | |
tree | 96d96bf001919d322c6f84f562f35b722a2c06fc /tests/admin_filters | |
parent | 2b76f457494414f96d3848a5591909cbb48239e9 (diff) | |
download | django-8a4e5067605e608c3fcbb5ca11e0019eac8b40aa.tar.gz |
Fixed #19721 -- Allowed admin filters to customize the list separator.
Diffstat (limited to 'tests/admin_filters')
-rw-r--r-- | tests/admin_filters/tests.py | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py index 17aa54a6f6..4f1ff26048 100644 --- a/tests/admin_filters/tests.py +++ b/tests/admin_filters/tests.py @@ -4,7 +4,8 @@ import unittest from django.contrib.admin import ( AllValuesFieldListFilter, BooleanFieldListFilter, EmptyFieldListFilter, - ModelAdmin, RelatedOnlyFieldListFilter, SimpleListFilter, site, + FieldListFilter, ModelAdmin, RelatedOnlyFieldListFilter, SimpleListFilter, + site, ) from django.contrib.admin.options import IncorrectLookupParameters from django.contrib.auth.admin import UserAdmin @@ -135,6 +136,17 @@ class DepartmentListFilterLookupWithDynamicValue(DecadeListFilterWithTitleAndPar return (('the 80s', "the 1980's"), ('the 90s', "the 1990's"),) +class EmployeeNameCustomDividerFilter(FieldListFilter): + list_separator = '|' + + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = '%s__in' % field_path + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + return [self.lookup_kwarg] + + class CustomUserAdmin(UserAdmin): list_filter = ('books_authored', 'books_contributed') @@ -231,6 +243,12 @@ class EmployeeAdmin(ModelAdmin): list_filter = ['department'] +class EmployeeCustomDividerFilterAdmin(EmployeeAdmin): + list_filter = [ + ('name', EmployeeNameCustomDividerFilter), + ] + + class DepartmentFilterEmployeeAdmin(EmployeeAdmin): list_filter = [DepartmentListFilterLookupWithNonStringValue] @@ -1547,3 +1565,29 @@ class ListFiltersTests(TestCase): request.user = self.alfred with self.assertRaises(IncorrectLookupParameters): modeladmin.get_changelist_instance(request) + + def test_lookup_using_custom_divider(self): + """ + Filter __in lookups with a custom divider. + """ + jane = Employee.objects.create(name='Jane,Green', department=self.design) + modeladmin = EmployeeCustomDividerFilterAdmin(Employee, site) + employees = [jane, self.jack] + + request = self.request_factory.get( + '/', {'name__in': "|".join(e.name for e in employees)} + ) + # test for lookup with custom divider + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + # Make sure the correct queryset is returned + queryset = changelist.get_queryset(request) + self.assertEqual(list(queryset), employees) + + # test for lookup with comma in the lookup string + request = self.request_factory.get('/', {'name': jane.name}) + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + # Make sure the correct queryset is returned + queryset = changelist.get_queryset(request) + self.assertEqual(list(queryset), [jane]) |