From c63b3ac5adc6ae33f5055b0639796d9a2700f478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Schm=C3=B6cker?= Date: Sat, 24 Aug 2024 20:34:05 +0200 Subject: [PATCH] feat: search for every key in any field --- .../api/cyberstorm/views/package_listing_list.py | 6 ++++-- .../api/experimental/views/community_package_list.py | 6 ++++-- django/thunderstore/repository/views/package/list.py | 7 +++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/django/thunderstore/api/cyberstorm/views/package_listing_list.py b/django/thunderstore/api/cyberstorm/views/package_listing_list.py index eec1f8e4e..6a2b65dad 100644 --- a/django/thunderstore/api/cyberstorm/views/package_listing_list.py +++ b/django/thunderstore/api/cyberstorm/views/package_listing_list.py @@ -457,10 +457,12 @@ def filter_by_query( parts = [x for x in query.split(" ") if x] for part in parts: + part_query = Q() for field in search_fields: - icontains_query &= ~Q(**{f"{field}__icontains": part}) + part_query |= Q(**{f"{field}__icontains": part}) + icontains_query &= part_query - return queryset.exclude(icontains_query).distinct() + return queryset.filter(icontains_query).distinct() def filter_by_review_status( diff --git a/django/thunderstore/frontend/api/experimental/views/community_package_list.py b/django/thunderstore/frontend/api/experimental/views/community_package_list.py index e1682dbe6..3b53d59a8 100644 --- a/django/thunderstore/frontend/api/experimental/views/community_package_list.py +++ b/django/thunderstore/frontend/api/experimental/views/community_package_list.py @@ -194,10 +194,12 @@ def filter_by_query( parts = [x for x in query.split(" ") if x] for part in parts: + part_query = Q() for field in search_fields: - icontains_query &= ~Q(**{f"{field}__icontains": part}) + part_query |= Q(**{f"{field}__icontains": part}) + icontains_query &= part_query - return queryset.exclude(icontains_query).distinct() + return queryset.filter(icontains_query).distinct() def order_queryset( self, ordering: str, queryset: QuerySet[Package] diff --git a/django/thunderstore/repository/views/package/list.py b/django/thunderstore/repository/views/package/list.py index 46e5c75eb..1052aa8a7 100644 --- a/django/thunderstore/repository/views/package/list.py +++ b/django/thunderstore/repository/views/package/list.py @@ -202,11 +202,14 @@ def perform_search(self, queryset, search_query): icontains_query = Q() parts = [x for x in search_query.split(" ") if x] + for part in parts: + part_query = Q() for field in search_fields: - icontains_query &= ~Q(**{f"{field}__icontains": part}) + part_query |= Q(**{f"{field}__icontains": part}) + icontains_query &= part_query - return queryset.exclude(icontains_query).distinct() + return queryset.filter(icontains_query).distinct() def filter_approval_status( self, queryset: QuerySet[PackageListing]