12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from django.contrib.auth.decorators import login_required
- from django.db.models import Q, F
- from django.shortcuts import render
- from django.db.models.functions import Concat
- from tickets.models import Ticket
- @login_required
- def search(request):
- found_tickets = None
- query_string = ""
-
- if request.GET:
- if ("search" in request.GET) and request.GET["search"].strip():
- query_string = request.GET["search"]
- found_tickets = Ticket.objects.filter(
- Q(ticket_list__group__in=request.user.groups.all())
- | Q(assigned_to=request.user)
- )
-
- found_tickets = found_tickets.annotate(created_by_username=F("created_by__username"))
- found_tickets = found_tickets.annotate(assigned_to_username=F("assigned_to__username"))
- found_tickets = found_tickets.filter(
- Q(title__icontains=query_string)
- | Q(ticket_list__name__icontains=query_string)
- | Q(note__icontains=query_string)
- | Q(created_by_username__icontains=query_string)
- | Q(assigned_to_username__icontains=query_string)
- | Q(status__icontains=query_string)
- )
- found_tickets = found_tickets.select_related("ticket_list")
- found_tickets = found_tickets.order_by("-priority")
- context = {
- "query_string": query_string,
- "found_tickets": found_tickets
- }
- return render(request, "tickets/search.html", context)
|