summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaulo <commonzenpython@gmail.com>2017-06-03 18:13:38 -0400
committerTim Graham <timograham@gmail.com>2017-06-06 08:18:08 -0400
commita0707947e4aacd461a3dbb653ddbf800ec2a6dea (patch)
treea588011ee90fef8bc5e9ded4ac2bcb32ca040231
parentb373812b0bb4654e049ccf6a60e92a7e9f603a99 (diff)
[1.11.x] Fixed #28202 -- Fixed FieldListFilter.get_queryset() crash on invalid input.
Backport of 4ad2f862844d35404e4798b3227517625210a72e from master
-rw-r--r--django/contrib/admin/filters.py4
-rw-r--r--docs/releases/1.11.3.txt3
-rw-r--r--tests/admin_filters/tests.py8
-rw-r--r--tests/admin_views/admin.py2
4 files changed, 15 insertions, 2 deletions
diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py
index 87839c3130..8980370fbf 100644
--- a/django/contrib/admin/filters.py
+++ b/django/contrib/admin/filters.py
@@ -135,7 +135,9 @@ class FieldListFilter(ListFilter):
def queryset(self, request, queryset):
try:
return queryset.filter(**self.used_parameters)
- except ValidationError as e:
+ except (ValueError, ValidationError) as e:
+ # Fields may raise a ValueError or ValidationError when converting
+ # the parameters to the correct type.
raise IncorrectLookupParameters(e)
@classmethod
diff --git a/docs/releases/1.11.3.txt b/docs/releases/1.11.3.txt
index f273a36e9f..5b3b1066a9 100644
--- a/docs/releases/1.11.3.txt
+++ b/docs/releases/1.11.3.txt
@@ -18,3 +18,6 @@ Bugfixes
* Fixed an incorrect ``DisallowedModelAdminLookup`` exception when using
a nested reverse relation in ``list_filter`` (:ticket:`28262`).
+
+* Fixed admin's ``FieldListFilter.get_queryset()`` crash on invalid input
+ (:ticket:`28202`).
diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py
index e2da7ec59e..509e25eece 100644
--- a/tests/admin_filters/tests.py
+++ b/tests/admin_filters/tests.py
@@ -8,6 +8,7 @@ from django.contrib.admin import (
AllValuesFieldListFilter, BooleanFieldListFilter, ModelAdmin,
RelatedOnlyFieldListFilter, SimpleListFilter, site,
)
+from django.contrib.admin.options import IncorrectLookupParameters
from django.contrib.admin.views.main import ChangeList
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
@@ -766,6 +767,13 @@ class ListFiltersTests(TestCase):
queryset = changelist.get_queryset(request)
self.assertEqual(list(queryset), [self.bio_book, self.djangonaut_book])
+ def test_fieldlistfilter_invalid_lookup_parameters(self):
+ """Filtering by an invalid value."""
+ modeladmin = BookAdmin(Book, site)
+ request = self.request_factory.get('/', {'author__id__exact': 'StringNotInteger!'})
+ with self.assertRaises(IncorrectLookupParameters):
+ self.get_changelist(request, Book, modeladmin)
+
def test_simplelistfilter(self):
modeladmin = DecadeFilterBookAdmin(Book, site)
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index c70bebec87..b5e0ff4814 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -176,7 +176,7 @@ class CustomArticleAdmin(admin.ModelAdmin):
class ThingAdmin(admin.ModelAdmin):
- list_filter = ('color__warm', 'color__value', 'pub_date',)
+ list_filter = ('color', 'color__warm', 'color__value', 'pub_date')
class InquisitionAdmin(admin.ModelAdmin):