diff options
author | manav014 <dpsman13016@gmail.com> | 2020-09-13 18:13:21 -0700 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-09-15 09:12:14 +0200 |
commit | 580a4341cb0b4cbfc215a70afc004875a7e815f4 (patch) | |
tree | aa00c53929e03a3e1fdc7854cccf6a2763e64f1e /tests/admin_filters | |
parent | fed257ddff449e1bf1ce06d9a7fddb148290a6ac (diff) | |
download | django-580a4341cb0b4cbfc215a70afc004875a7e815f4.tar.gz |
Fixed #31636 -- Made BooleanFieldListFilter respect Field.choices.
Diffstat (limited to 'tests/admin_filters')
-rw-r--r-- | tests/admin_filters/models.py | 5 | ||||
-rw-r--r-- | tests/admin_filters/tests.py | 70 |
2 files changed, 69 insertions, 6 deletions
diff --git a/tests/admin_filters/models.py b/tests/admin_filters/models.py index cee3af5b90..f286e641de 100644 --- a/tests/admin_filters/models.py +++ b/tests/admin_filters/models.py @@ -31,6 +31,11 @@ class Book(models.Model): is_best_seller = models.BooleanField(default=0, null=True) is_best_seller2 = models.NullBooleanField(default=0) date_registered = models.DateField(null=True) + availability = models.BooleanField(choices=( + (False, 'Paid'), + (True, 'Free'), + (None, 'Obscure'), + ), null=True) # This field name is intentionally 2 characters long (#16080). no = models.IntegerField(verbose_name='number', blank=True, null=True) diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py index 16a7ce495c..6986afb64a 100644 --- a/tests/admin_filters/tests.py +++ b/tests/admin_filters/tests.py @@ -140,7 +140,7 @@ class CustomUserAdmin(UserAdmin): class BookAdmin(ModelAdmin): - list_filter = ('year', 'author', 'contributors', 'is_best_seller', 'date_registered', 'no') + list_filter = ('year', 'author', 'contributors', 'is_best_seller', 'date_registered', 'no', 'availability') ordering = ('-id',) @@ -156,6 +156,7 @@ class BookAdminWithTupleBooleanFilter(BookAdmin): ('is_best_seller', BooleanFieldListFilter), 'date_registered', 'no', + ('availability', BooleanFieldListFilter), ) @@ -288,22 +289,22 @@ class ListFiltersTests(TestCase): cls.djangonaut_book = Book.objects.create( title='Djangonaut: an art of living', year=2009, author=cls.alfred, is_best_seller=True, date_registered=cls.today, - is_best_seller2=True, + is_best_seller2=True, availability=True, ) cls.bio_book = Book.objects.create( title='Django: a biography', year=1999, author=cls.alfred, is_best_seller=False, no=207, - is_best_seller2=False, + is_best_seller2=False, availability=False, ) cls.django_book = Book.objects.create( title='The Django Book', year=None, author=cls.bob, is_best_seller=None, date_registered=cls.today, no=103, - is_best_seller2=None, + is_best_seller2=None, availability=True, ) cls.guitar_book = Book.objects.create( title='Guitar for dummies', year=2002, is_best_seller=True, date_registered=cls.one_week_ago, - is_best_seller2=True, + is_best_seller2=True, availability=None, ) cls.guitar_book.contributors.set([cls.bob, cls.lisa]) @@ -956,6 +957,63 @@ class ListFiltersTests(TestCase): self.assertIs(choice['selected'], True) self.assertEqual(choice['query_string'], '?is_best_seller__isnull=True') + def test_booleanfieldlistfilter_choices(self): + modeladmin = BookAdmin(Book, site) + self.verify_booleanfieldlistfilter_choices(modeladmin) + + def test_booleanfieldlistfilter_tuple_choices(self): + modeladmin = BookAdminWithTupleBooleanFilter(Book, site) + self.verify_booleanfieldlistfilter_choices(modeladmin) + + def verify_booleanfieldlistfilter_choices(self, modeladmin): + # False. + request = self.request_factory.get('/', {'availability__exact': 0}) + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + queryset = changelist.get_queryset(request) + self.assertEqual(list(queryset), [self.bio_book]) + filterspec = changelist.get_filters(request)[0][6] + self.assertEqual(filterspec.title, 'availability') + choice = select_by(filterspec.choices(changelist), 'display', 'Paid') + self.assertIs(choice['selected'], True) + self.assertEqual(choice['query_string'], '?availability__exact=0') + # True. + request = self.request_factory.get('/', {'availability__exact': 1}) + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + queryset = changelist.get_queryset(request) + self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book]) + filterspec = changelist.get_filters(request)[0][6] + self.assertEqual(filterspec.title, 'availability') + choice = select_by(filterspec.choices(changelist), 'display', 'Free') + self.assertIs(choice['selected'], True) + self.assertEqual(choice['query_string'], '?availability__exact=1') + # None. + request = self.request_factory.get('/', {'availability__isnull': 'True'}) + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + queryset = changelist.get_queryset(request) + self.assertEqual(list(queryset), [self.guitar_book]) + filterspec = changelist.get_filters(request)[0][6] + self.assertEqual(filterspec.title, 'availability') + choice = select_by(filterspec.choices(changelist), 'display', 'Obscure') + self.assertIs(choice['selected'], True) + self.assertEqual(choice['query_string'], '?availability__isnull=True') + # All. + request = self.request_factory.get('/') + request.user = self.alfred + changelist = modeladmin.get_changelist_instance(request) + queryset = changelist.get_queryset(request) + self.assertEqual( + list(queryset), + [self.guitar_book, self.django_book, self.bio_book, self.djangonaut_book], + ) + filterspec = changelist.get_filters(request)[0][6] + self.assertEqual(filterspec.title, 'availability') + choice = select_by(filterspec.choices(changelist), 'display', 'All') + self.assertIs(choice['selected'], True) + self.assertEqual(choice['query_string'], '?') + def test_booleanfieldlistfilter_nullbooleanfield(self): modeladmin = BookAdmin2(Book, site) @@ -1212,7 +1270,7 @@ class ListFiltersTests(TestCase): queryset = changelist.get_queryset(request) self.assertEqual(list(queryset), [self.bio_book]) - filterspec = changelist.get_filters(request)[0][-1] + filterspec = changelist.get_filters(request)[0][5] self.assertEqual(filterspec.title, 'number') choices = list(filterspec.choices(changelist)) self.assertIs(choices[2]['selected'], True) |