44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from rest_framework.viewsets import ReadOnlyModelViewSet
|
|
from rest_framework.permissions import AllowAny
|
|
from drf_spectacular.utils import extend_schema
|
|
from django_core.mixins import BaseViewSetMixin
|
|
from core.apps.api.models import AdModel
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from core.apps.api.filters import AdFilter
|
|
from core.apps.api.serializers.ad.ad import (
|
|
FullListAdSerializer,
|
|
RetrieveAdSerializer,
|
|
CreateAdSerializer,
|
|
)
|
|
|
|
|
|
@extend_schema(tags=["Ads"])
|
|
class AdsView(BaseViewSetMixin, ReadOnlyModelViewSet):
|
|
queryset = AdModel.objects.all().order_by("-created_at")
|
|
serializer_class = FullListAdSerializer
|
|
permission_classes = [AllowAny]
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_class = AdFilter
|
|
|
|
action_permission_classes = {}
|
|
action_serializer_class = {
|
|
"list": FullListAdSerializer,
|
|
"retrieve": RetrieveAdSerializer,
|
|
"create": CreateAdSerializer,
|
|
}
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
queryset = self.filter_queryset(self.get_queryset())
|
|
page = self.paginate_queryset(queryset)
|
|
|
|
if page is not None:
|
|
data = {"ads": page}
|
|
serializer = FullListAdSerializer(data, context={"request": request})
|
|
return self.get_paginated_response(serializer.data)
|
|
|
|
data = {"ads": queryset}
|
|
serializer = FullListAdSerializer(data, context={"request": request})
|
|
response = self.get_paginated_response(serializer.data)
|
|
|
|
return response
|