ticket_list.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django.shortcuts import get_object_or_404
  2. from rest_framework import generics, permissions
  3. from rest_framework_api_key.permissions import HasAPIKey
  4. from tickets.api.permissions import UserCanReadTicketListPermission
  5. from tickets.api.serializers import TicketListSerializer, TicketSerializer
  6. from tickets.models import Ticket, TicketList
  7. class TicketListListAPIView(generics.ListAPIView):
  8. permission_classes = [permissions.IsAuthenticated | HasAPIKey]
  9. serializer_class = TicketListSerializer
  10. def get_queryset(self):
  11. user = self.request.user
  12. user_groups_ids = user.groups.all().values_list("pk", flat=True)
  13. ticket_lists = TicketList.objects.select_related("group").order_by("group__name", "name")
  14. if not user.is_superuser:
  15. if user_groups_ids:
  16. ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
  17. else:
  18. # ERROR:FIXME:NOTE:BUG: NotFound is not declarated. Need import some module
  19. raise NotFound("You do not yet belong to any groups. Ask your administrator to add you to one.")
  20. return ticket_lists
  21. class TicketListDetailAPIView(generics.ListAPIView):
  22. permission_classes = [permissions.IsAuthenticated & UserCanReadTicketListPermission]
  23. serializer_class = TicketSerializer
  24. def get_queryset(self):
  25. tickets = Ticket.objects.all()
  26. if self.kwargs.get("my"):
  27. tickets = tickets.filter(assigned_to=self.request.user)
  28. else:
  29. tickets = tickets.filter(ticket_list=self.get_object())
  30. return tickets
  31. # FIXME: По какой-то причине появляется ошибка после загрузки страницы redoc
  32. def get_object(self):
  33. obj = get_object_or_404(TicketList.objects.filter(pk=self.kwargs['pk']))
  34. self.check_object_permissions(self.request, obj)
  35. return obj