ticket_list.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. from rest_framework.exceptions import NotFound
  8. class TicketListListAPIView(generics.ListAPIView):
  9. permission_classes = [permissions.IsAuthenticated | HasAPIKey]
  10. serializer_class = TicketListSerializer
  11. def get_queryset(self):
  12. user = self.request.user
  13. user_groups_ids = user.groups.all().values_list("pk", flat=True)
  14. ticket_lists = TicketList.objects.select_related("group").order_by("group__name", "name")
  15. if not user.is_superuser:
  16. if user_groups_ids:
  17. ticket_lists = ticket_lists.filter(group__id__in=user_groups_ids)
  18. else:
  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