diff --git a/events/tests/test_filters.py b/events/tests/test_filters.py index 9b820a6..4dc9db6 100644 --- a/events/tests/test_filters.py +++ b/events/tests/test_filters.py @@ -194,6 +194,12 @@ def test_events_search_filter_by_presenter_name(self, api_client): assert len(response.data["results"]) == 1 assert response.data["results"][0]["title"] == "Python Workshop" + response = api_client.get(reverse("events-list"), {'search': 'Bob Wilson'}) + + assert response.status_code == status.HTTP_200_OK + assert len(response.data["results"]) == 1 + assert response.data["results"][0]["title"] == "Data Science Talk" + def test_events_search_multiple_presenters(self, api_client): """ Test event with multiple presenters """ presenter1 = UserFactory(first_name="Alice", last_name="Johnson") diff --git a/events/v1/filters.py b/events/v1/filters.py index c9b2fcf..6d47250 100644 --- a/events/v1/filters.py +++ b/events/v1/filters.py @@ -1,7 +1,8 @@ import django_filters from django.contrib.postgres.search import TrigramSimilarity -from django.db.models import Exists, OuterRef, Q +from django.db.models import Exists, OuterRef, Q, Value +from django.db.models.functions import Concat from events.models import Event, EventPresenter, Playlist, Tag @@ -49,9 +50,10 @@ def filter_search(self, queryset, _, value): presenter_match = EventPresenter.objects.filter( event=OuterRef('pk') + ).annotate( + full_name=Concat('user__first_name', Value(' '), 'user__last_name') ).filter( - Q(user__first_name__icontains=search_term) | - Q(user__last_name__icontains=search_term) + full_name__icontains=search_term ) queryset = queryset.annotate(