From a51f9250b3b0a475fbd97fa4c369e39d8142cf53 Mon Sep 17 00:00:00 2001 From: Mng <50384638+Mng-dev-ai@users.noreply.github.com> Date: Thu, 9 Mar 2023 04:36:54 +0200 Subject: [PATCH] Enable partial matching on images index view where available (#10215) Fixes #10213 --- wagtail/images/tests/test_admin_views.py | 7 +++++++ wagtail/images/views/images.py | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/wagtail/images/tests/test_admin_views.py b/wagtail/images/tests/test_admin_views.py index f721e1c61e..1e190b77e2 100644 --- a/wagtail/images/tests/test_admin_views.py +++ b/wagtail/images/tests/test_admin_views.py @@ -78,6 +78,13 @@ class TestImageIndexView(WagtailTestUtils, TestCase): self.assertContains(response, "a cute kitten") self.assertNotContains(response, "a cute puppy") + def test_search_partial_match(self): + response = self.get({"q": "kit"}) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context["query_string"], "kit") + self.assertContains(response, "a cute kitten") + self.assertNotContains(response, "a cute puppy") + def test_collection_query_search(self): root_collection = Collection.get_first_root_node() child_collection = [ diff --git a/wagtail/images/views/images.py b/wagtail/images/views/images.py index 79b6ab6ca2..ddfa4069f6 100644 --- a/wagtail/images/views/images.py +++ b/wagtail/images/views/images.py @@ -26,6 +26,7 @@ from wagtail.images.models import Filter, SourceImageIOError from wagtail.images.permissions import permission_policy from wagtail.images.utils import generate_signature from wagtail.models import Collection, Site +from wagtail.search.backends import get_search_backend permission_checker = PermissionPolicyChecker(permission_policy) @@ -104,7 +105,18 @@ class BaseListingView(TemplateView): if self.form.is_valid(): query_string = self.form.cleaned_data["q"] if query_string: - images = images.search(query_string) + search_backend = get_search_backend() + if images.model.get_autocomplete_search_fields(): + try: + images = search_backend.autocomplete(query_string, images) + except NotImplementedError: + images = search_backend.search( + query_string, images, partial_match=True + ) + else: + images = search_backend.search( + query_string, images, partial_match=True + ) else: self.form = SearchForm(placeholder=_("Search images"))