Skip to content

Commit a070794

Browse files
czpythontimgraham
authored andcommitted
[1.11.x] Fixed #28202 -- Fixed FieldListFilter.get_queryset() crash on invalid input.
Backport of 4ad2f86 from master
1 parent b373812 commit a070794

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

django/contrib/admin/filters.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ def has_output(self):
135135
def queryset(self, request, queryset):
136136
try:
137137
return queryset.filter(**self.used_parameters)
138-
except ValidationError as e:
138+
except (ValueError, ValidationError) as e:
139+
# Fields may raise a ValueError or ValidationError when converting
140+
# the parameters to the correct type.
139141
raise IncorrectLookupParameters(e)
140142

141143
@classmethod

docs/releases/1.11.3.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ Bugfixes
1818

1919
* Fixed an incorrect ``DisallowedModelAdminLookup`` exception when using
2020
a nested reverse relation in ``list_filter`` (:ticket:`28262`).
21+
22+
* Fixed admin's ``FieldListFilter.get_queryset()`` crash on invalid input
23+
(:ticket:`28202`).

tests/admin_filters/tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
AllValuesFieldListFilter, BooleanFieldListFilter, ModelAdmin,
99
RelatedOnlyFieldListFilter, SimpleListFilter, site,
1010
)
11+
from django.contrib.admin.options import IncorrectLookupParameters
1112
from django.contrib.admin.views.main import ChangeList
1213
from django.contrib.auth.admin import UserAdmin
1314
from django.contrib.auth.models import User
@@ -766,6 +767,13 @@ def test_fieldlistfilter_underscorelookup_tuple(self):
766767
queryset = changelist.get_queryset(request)
767768
self.assertEqual(list(queryset), [self.bio_book, self.djangonaut_book])
768769

770+
def test_fieldlistfilter_invalid_lookup_parameters(self):
771+
"""Filtering by an invalid value."""
772+
modeladmin = BookAdmin(Book, site)
773+
request = self.request_factory.get('/', {'author__id__exact': 'StringNotInteger!'})
774+
with self.assertRaises(IncorrectLookupParameters):
775+
self.get_changelist(request, Book, modeladmin)
776+
769777
def test_simplelistfilter(self):
770778
modeladmin = DecadeFilterBookAdmin(Book, site)
771779

tests/admin_views/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def changelist_view(self, request):
176176

177177

178178
class ThingAdmin(admin.ModelAdmin):
179-
list_filter = ('color__warm', 'color__value', 'pub_date',)
179+
list_filter = ('color', 'color__warm', 'color__value', 'pub_date')
180180

181181

182182
class InquisitionAdmin(admin.ModelAdmin):

0 commit comments

Comments
 (0)