Skip to content

Commit 35d6aa5

Browse files
authored
Merge pull request #1007 from thecourseforum/time-with-query-filter-fix
fixed incorrect filtering when both query string and time filter pres…
2 parents 6117417 + 7db48ef commit 35d6aa5

File tree

1 file changed

+28
-29
lines changed

1 file changed

+28
-29
lines changed

tcf_website/views/search.py

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -150,23 +150,17 @@ def normalize_search_query(q: str) -> str:
150150
)
151151
# expose mnemonic to view
152152
.annotate(mnemonic=F("subdepartment__mnemonic"))
153-
.filter(max_similarity__gte=similarity_threshold)
154-
# filters out classes with 3 digit class numbers (old naming system)
155-
.filter(Q(number__isnull=True) | Q(number__regex=r"^\d{4}$"))
156-
# filters out classes that haven't been taught since Fall 2020
157-
.exclude(semester_last_taught_id__lt=48)
158-
.order_by("-max_similarity")
159153
)
160154

161155
# Apply filters
162-
if filters.get("disciplines"):
163-
results = results.filter(disciplines__name__in=filters.get("disciplines"))
156+
results = apply_filters(results, filters)
164157

165-
if filters.get("subdepartments"):
166-
results = results.filter(subdepartment__mnemonic__in=filters.get("subdepartments"))
158+
results = (results.filter(max_similarity__gte=similarity_threshold)
159+
.filter(Q(number__isnull=True) | Q(number__regex=r"^\d{4}$"))
160+
.exclude(semester_last_taught_id__lt=48)
161+
.order_by("-max_similarity"))
167162

168-
if filters.get("instructors"):
169-
results = results.filter(section__instructors__id__in=filters.get("instructors"))
163+
results = results.distinct().order_by("subdepartment__mnemonic", "number")
170164

171165
courses = [
172166
{
@@ -197,23 +191,7 @@ def filter_courses(filters):
197191
)
198192

199193
# Apply filters
200-
if filters.get("disciplines"):
201-
results = results.filter(disciplines__name__in=filters.get("disciplines"))
202-
203-
if filters.get("subdepartments"):
204-
results = results.filter(subdepartment__mnemonic__in=filters.get("subdepartments"))
205-
206-
if filters.get("instructors"):
207-
results = results.filter(section__instructors__id__in=filters.get("instructors"))
208-
209-
# Apply time filters
210-
weekdays = [day for day in filters.get("weekdays", []) if day]
211-
from_time = filters.get("from_time")
212-
to_time = filters.get("to_time")
213-
214-
if any([weekdays, from_time, to_time]):
215-
time_filtered = Course.filter_by_time(days=weekdays, start_time=from_time, end_time=to_time)
216-
results = results.filter(id__in=time_filtered.values_list("id", flat=True))
194+
results = apply_filters(results, filters)
217195

218196
results = results.distinct().order_by("subdepartment__mnemonic", "number")
219197

@@ -231,3 +209,24 @@ def filter_courses(filters):
231209
]
232210

233211
return courses
212+
213+
def apply_filters(results, filters):
214+
"""Apply filters to course queryset."""
215+
if filters.get("disciplines"):
216+
results = results.filter(disciplines__name__in=filters.get("disciplines"))
217+
218+
if filters.get("subdepartments"):
219+
results = results.filter(subdepartment__mnemonic__in=filters.get("subdepartments"))
220+
221+
if filters.get("instructors"):
222+
results = results.filter(section__instructors__id__in=filters.get("instructors"))
223+
224+
weekdays = [day for day in filters.get("weekdays", []) if day]
225+
from_time = filters.get("from_time")
226+
to_time = filters.get("to_time")
227+
228+
if any([weekdays, from_time, to_time]):
229+
time_filtered = Course.filter_by_time(days=weekdays, start_time=from_time, end_time=to_time)
230+
results = results.filter(id__in=time_filtered.values_list("id", flat=True))
231+
232+
return results

0 commit comments

Comments
 (0)