summaryrefslogtreecommitdiff
path: root/tests/admin_filters
diff options
context:
space:
mode:
authorShreya Bamne <shreya.bamne@gmail.com>2021-12-08 15:24:55 +0100
committerCarlton Gibson <carlton.gibson@noumenal.es>2021-12-08 15:25:52 +0100
commit8a4e5067605e608c3fcbb5ca11e0019eac8b40aa (patch)
tree96d96bf001919d322c6f84f562f35b722a2c06fc /tests/admin_filters
parent2b76f457494414f96d3848a5591909cbb48239e9 (diff)
downloaddjango-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.py46
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])