from rest_framework import viewsets, filters from rest_framework.permissions import IsAuthenticated from rest_framework.decorators import action from rest_framework.response import Response from django_filters.rest_framework import DjangoFilterBackend from utils.permissions import ClubFilterBackend, ClubLevelPermission from .models import Trainer from .serializers import TrainerSerializer from wrestleDesk.pagination import StandardResultsSetPagination class TrainerViewSet(viewsets.ModelViewSet): queryset = Trainer.objects.select_related('club').all() serializer_class = TrainerSerializer pagination_class = StandardResultsSetPagination permission_classes = [IsAuthenticated] filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] filterset_fields = ['club', 'is_active'] search_fields = ['first_name', 'last_name', 'email'] ordering_fields = ['last_name', 'first_name', 'created_at'] @action(detail=False, methods=['get']) def available_for_training(self, request): """ Returns ALL trainers without club filtering. Used when selecting trainers for a training session where trainers from other clubs may attend. """ queryset = Trainer.objects.select_related('club').filter(is_active=True) search = request.query_params.get('search') if search: queryset = queryset.filter(first_name__icontains=search) | queryset.filter(last_name__icontains=search) queryset = queryset.order_by('last_name', 'first_name') page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)