from django.contrib.auth import get_user_model from django.db.models import Q from django.http import Http404 from django.views.generic import TemplateView from gestioncof.decorators import buro_required from shared.views import autocomplete User = get_user_model() class COFMemberSearch(autocomplete.ModelSearch): model = User search_fields = ["username", "first_name", "last_name"] def get_queryset_filter(self, *args, **kwargs): qset_filter = super().get_queryset_filter(*args, **kwargs) qset_filter &= Q(profile__is_cof=True) return qset_filter def result_uuid(self, user): return user.username class COFOthersSearch(autocomplete.ModelSearch): model = User search_fields = ["username", "first_name", "last_name"] def get_queryset_filter(self, *args, **kwargs): qset_filter = super().get_queryset_filter(*args, **kwargs) qset_filter &= Q(profile__is_cof=False) return qset_filter def result_uuid(self, user): return user.username class COFSearch(autocomplete.Compose): search_units = [ ("members", COFMemberSearch()), ("others", COFOthersSearch()), ("clippers", autocomplete.LDAPSearch()), ] cof_search = COFSearch() class AutocompleteView(TemplateView): template_name = "gestioncof/search_results.html" def get_context_data(self, *args, **kwargs): ctx = super().get_context_data(*args, **kwargs) if "q" not in self.request.GET: raise Http404 q = self.request.GET["q"] ctx["q"] = q ctx.update(cof_search.search(q.split())) return ctx autocomplete = buro_required(AutocompleteView.as_view())