Skip to content

Commit 9fd347f

Browse files
authored
[fix] Fixed autocomplete filter exception on invalid input openwisp#326
Fixes openwisp#326
1 parent 1342f13 commit 9fd347f

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

openwisp_utils/admin_theme/filters.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from admin_auto_filters.filters import AutocompleteFilter as BaseAutocompleteFilter
2+
from django.contrib import messages
23
from django.contrib.admin.filters import FieldListFilter, SimpleListFilter
34
from django.contrib.admin.utils import NotRelationField, get_model_from_relation
4-
from django.core.exceptions import ImproperlyConfigured
5+
from django.core.exceptions import ImproperlyConfigured, ValidationError
56
from django.db.models.fields import CharField, UUIDField
67
from django.urls import reverse
78
from django.utils.translation import gettext_lazy as _
@@ -107,3 +108,17 @@ class Media:
107108

108109
def get_autocomplete_url(self, request, model_admin):
109110
return reverse('admin:ow-auto-filter')
111+
112+
def __init__(self, *args, **kwargs):
113+
try:
114+
return super().__init__(*args, **kwargs)
115+
except ValidationError:
116+
None
117+
118+
def queryset(self, request, queryset):
119+
try:
120+
return super().queryset(request, queryset)
121+
except ValidationError as e:
122+
error_msg = ' '.join(e.messages)
123+
messages.error(request, error_msg)
124+
return queryset

tests/test_project/tests/test_admin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,3 +429,10 @@ def test_ow_auto_filter_view_reverse_relation(self):
429429
url = f'{url}?app_label=test_project&model_name=shelf&field_name=book'
430430
response = self.client.get(url)
431431
self.assertEqual(response.status_code, 200)
432+
433+
def test_ow_autocomplete_filter_uuid_exception(self):
434+
url = reverse('admin:test_project_book_changelist')
435+
url = f'{url}?shelf__id=invalid'
436+
response = self.client.get(url)
437+
self.assertEqual(response.status_code, 200)
438+
self.assertContains(response, '“invalid” is not a valid UUID.')

0 commit comments

Comments
 (0)