from rest_framework import mixins from rest_framework.viewsets import GenericViewSet from django_core.mixins.base import BaseViewSetMixin from drf_spectacular.utils import extend_schema from rest_framework.permissions import AllowAny from core.apps.api.models import AdModel from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import SearchFilter from core.apps.api.serializers.search import ( ListSearchAdsSerializer, ) @extend_schema(tags=['Search Ads']) class SearchAdsViewSet(BaseViewSetMixin, mixins.ListModelMixin, GenericViewSet): queryset = AdModel.objects.all().order_by('-created_at') serializer_class = ListSearchAdsSerializer permission_classes = [AllowAny] http_method_names = ['get'] filter_backends = [DjangoFilterBackend, SearchFilter] search_fields = ["name"] action_serializer_class = { 'list': ListSearchAdsSerializer, } def get_queryset(self): queryset = super().get_queryset() search_text = self.request.query_params.get('search') if search_text: field = f"name" queryset = queryset.filter(**{f"{field}__icontains": search_text}) return queryset def list(self, request, *args, **kwargs): response = super().list(request, *args, **kwargs) if isinstance(response.data, dict) and "results" in response.data: response.data["results"] = response.data["results"][:5] else: response.data = response.data[:5] return response