71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
# from django.shortcuts import render
|
|
# from django.views.generic import ListView
|
|
# from app.models import NewsAndEvents
|
|
|
|
|
|
# class SearchNewsAndEventsView(ListView):
|
|
# template_name = "search/search_view.html"
|
|
|
|
# def get_context_data(self, *args, **kwargs):
|
|
# context = super(SearchNewsAndEventsView, self).get_context_data(*args, **kwargs)
|
|
# query = self.request.GET.get('q')
|
|
# context['query'] = query
|
|
# context['obj_counter'] = NewsAndEvents.objects.search(query).count()
|
|
# # SearchQuery.objects.create(query=query)
|
|
# return context
|
|
|
|
# def get_queryset(self, *args, **kwargs):
|
|
# request = self.request
|
|
# method_dict = request.GET
|
|
# query = method_dict.get('q', None) # method_dict['q']
|
|
# if query is not None:
|
|
# return NewsAndEvents.objects.search(query)
|
|
# return NewsAndEvents.objects.all()
|
|
# '''
|
|
# __icontains = field contains this
|
|
# __iexact = fields is exactly this
|
|
# '''
|
|
|
|
|
|
# search.views.py
|
|
from itertools import chain
|
|
from django.views.generic import ListView
|
|
|
|
from django.db.models import Q
|
|
|
|
from accounts.models import User, Student
|
|
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
|
|
)
|
|
qs = sorted(queryset_chain, key=lambda instance: instance.pk, reverse=True)
|
|
self.count = len(qs) # since qs is actually a list
|
|
return qs
|
|
return NewsAndEvents.objects.none() # just an empty queryset as default
|