views.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.shortcuts import get_object_or_404
  2. from rest_framework import viewsets, exceptions
  3. from organizations_ext.models import Organization, OrganizationUserRole
  4. from .serializers import TeamSerializer
  5. from .models import Team
  6. class NestedTeamViewSet(viewsets.ModelViewSet):
  7. """ Teams for an Organization """
  8. queryset = Team.objects.all()
  9. serializer_class = TeamSerializer
  10. def get_queryset(self):
  11. if self.request.user.is_authenticated:
  12. queryset = self.queryset.filter(organization__users=self.request.user)
  13. organization_slug = self.kwargs.get("organization_slug")
  14. if organization_slug:
  15. queryset = queryset.filter(organization__slug=organization_slug)
  16. return queryset.prefetch_related("members")
  17. return self.queryset.none()
  18. def perform_create(self, serializer):
  19. try:
  20. organization = Organization.objects.get(
  21. slug=self.kwargs.get("organization_slug"),
  22. users=self.request.user,
  23. organization_users__role__gte=OrganizationUserRole.ADMIN,
  24. )
  25. except Organization.DoesNotExist:
  26. raise exceptions.ValidationError("Organization does not exist")
  27. team = serializer.save(organization=organization)
  28. org_user = organization.organization_users.filter(
  29. user=self.request.user
  30. ).first()
  31. team.members.add(org_user)
  32. class TeamViewSet(NestedTeamViewSet):
  33. lookup_value_regex = r"(?P<organization_slug>[^/.]+)/(?P<team_slug>[-\w]+)"
  34. def get_object(self):
  35. queryset = self.filter_queryset(self.get_queryset())
  36. obj = get_object_or_404(
  37. queryset,
  38. slug=self.kwargs["team_slug"],
  39. organization__slug=self.kwargs["organization_slug"],
  40. )
  41. # May raise a permission denied
  42. self.check_object_permissions(self.request, obj)
  43. return obj