Kod źródłowy modułu poradnia.navsearch.views

from django.db.models import Q
from django.http import JsonResponse
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from django.views import View

from poradnia.cases.models import Case
from poradnia.users.models import User


[dokumentacja] class AutocompleteView(View): def get_user_queryset(self, q): return ( User.objects.for_user(self.request.user) .filter( Q(username__icontains=q) | Q(first_name__icontains=q) | Q(last_name__icontains=q) | Q(email__icontains=q) ) .distinct()[:3] ) def get_item(self, row): return {"url": row.get_absolute_url(), "text": force_str(row)} def get_case_id_queryset(self, q): if q.replace("#", "").isdigit(): return Case.objects.for_user(self.request.user).filter( id=q.replace("#", "") )[:3] return Case.objects.none() def get_case_queryset(self, q): return Case.objects.for_user(self.request.user).filter(name__icontains=q)[:3] def get(self, *args, **kwargs): q = self.request.GET.get("q") data = [] if not q else self.get_results(q) return JsonResponse({"results": data}, safe=False) def get_results(self, q): data = [] data.append( { "text": _("Users"), "children": [self.get_item(x) for x in self.get_user_queryset(q)], } ) data.append( { "text": _("Cases by ID"), "children": [self.get_item(x) for x in self.get_case_id_queryset(q)], } ) data.append( { "text": _("Cases by name"), "children": [self.get_item(x) for x in self.get_case_queryset(q)], } ) return data