2023-12-28 00:09:59 +03:00

39 lines
1.3 KiB
Python

from itertools import chain
from django.views.generic import ListView
from app.models import NewsAndEvents
from course.models import Program, Course
from quiz.models import Quiz
class SearchView(ListView):
template_name = "search/search_view.html"
paginate_by = 20
count = 0
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["count"] = self.count or 0
context["query"] = self.request.GET.get("q")
return context
def get_queryset(self):
request = self.request
query = request.GET.get("q", None)
if query is not None:
news_events_results = NewsAndEvents.objects.search(query)
program_results = Program.objects.search(query)
course_results = Course.objects.search(query)
quiz_results = Quiz.objects.search(query)
# combine querysets
queryset_chain = chain(
news_events_results, program_results, course_results, quiz_results
)
queryset = sorted(
queryset_chain, key=lambda instance: instance.pk, reverse=True
)
self.count = len(queryset) # since queryset is actually a list
return queryset
return NewsAndEvents.objects.none() # just an empty queryset as default