"""ViewSets для API модуля закупок.""" from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters, viewsets from rest_framework.decorators import action from rest_framework.response import Response from procurement.models import ( Supplier, ) from ..permissions import ( CanManageSupplier, ) from ..serializers import ( SupplierSerializer, ) class SupplierViewSet(viewsets.ModelViewSet): """ViewSet для поставщиков.""" queryset = Supplier.objects.all() serializer_class = SupplierSerializer filter_backends = [ DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter, ] filterset_fields = ["is_active"] search_fields = ["name", "contact_person", "inn"] ordering_fields = ["name", "rating"] ordering = ["name"] def get_permissions(self): """Права доступа.""" permission_classes = [CanManageSupplier] return [permission() for permission in permission_classes] @action(detail=False, methods=["get"]) def top_rated(self, request): """Получить поставщиков с лучшим рейтингом.""" queryset = ( self.get_queryset() .filter(is_active=True, rating__gte=4.0) .order_by("-rating")[:10] ) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)