search.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.contrib.auth.decorators import login_required
  2. from django.db.models import Q, F
  3. from django.shortcuts import render
  4. from tickets.models import Ticket
  5. @login_required
  6. def search(request):
  7. found_tickets = None
  8. query_string = ""
  9. if request.GET:
  10. if ("search" in request.GET) and request.GET["search"].strip():
  11. query_string = request.GET["search"]
  12. found_tickets = Ticket.objects.filter(
  13. Q(ticket_list__group__in=request.user.groups.all())
  14. | Q(assigned_to=request.user)
  15. )
  16. found_tickets = found_tickets.annotate(created_by_username=F("created_by__username"))
  17. found_tickets = found_tickets.annotate(assigned_to_username=F("assigned_to__username"))
  18. found_tickets = found_tickets.filter(
  19. Q(title__icontains=query_string)
  20. | Q(ticket_list__name__icontains=query_string)
  21. | Q(note__icontains=query_string)
  22. | Q(created_by_username__icontains=query_string)
  23. | Q(assigned_to_username__icontains=query_string)
  24. | Q(status__icontains=query_string)
  25. )
  26. found_tickets = found_tickets.select_related("ticket_list")
  27. found_tickets = found_tickets.order_by("-priority")
  28. context = {
  29. "query_string": query_string,
  30. "found_tickets": found_tickets
  31. }
  32. return render(request, "tickets/search.html", context)