3fefc550fe
- Django backend with DRF (clubs, wrestlers, trainers, exercises, templates, trainings, homework, locations, leistungstest) - Next.js 16 frontend with React, Shadcn UI, Tailwind - JWT authentication - Full CRUD for all entities - Calendar view for trainings - Homework management system - Leistungstest tracking
44 lines
1.9 KiB
Python
44 lines
1.9 KiB
Python
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)
|