Skip to content

Commit 7911285

Browse files
authored
Allow filtering events by presenter full name (#68)
1 parent a180489 commit 7911285

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

events/tests/test_filters.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,12 @@ def test_events_search_filter_by_presenter_name(self, api_client):
194194
assert len(response.data["results"]) == 1
195195
assert response.data["results"][0]["title"] == "Python Workshop"
196196

197+
response = api_client.get(reverse("events-list"), {'search': 'Bob Wilson'})
198+
199+
assert response.status_code == status.HTTP_200_OK
200+
assert len(response.data["results"]) == 1
201+
assert response.data["results"][0]["title"] == "Data Science Talk"
202+
197203
def test_events_search_multiple_presenters(self, api_client):
198204
""" Test event with multiple presenters """
199205
presenter1 = UserFactory(first_name="Alice", last_name="Johnson")

events/v1/filters.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import django_filters
22

33
from django.contrib.postgres.search import TrigramSimilarity
4-
from django.db.models import Exists, OuterRef, Q
4+
from django.db.models import Exists, OuterRef, Q, Value
5+
from django.db.models.functions import Concat
56

67
from events.models import Event, EventPresenter, Playlist, Tag
78

@@ -49,9 +50,10 @@ def filter_search(self, queryset, _, value):
4950

5051
presenter_match = EventPresenter.objects.filter(
5152
event=OuterRef('pk')
53+
).annotate(
54+
full_name=Concat('user__first_name', Value(' '), 'user__last_name')
5255
).filter(
53-
Q(user__first_name__icontains=search_term) |
54-
Q(user__last_name__icontains=search_term)
56+
full_name__icontains=search_term
5557
)
5658

5759
queryset = queryset.annotate(

0 commit comments

Comments
 (0)