from django.utils.translation import gettext_lazy as _ from django_filters.rest_framework import DjangoFilterBackend from drf_spectacular.utils import extend_schema_view from rest_framework.viewsets import ReadOnlyModelViewSet from blog.filters import PostFilter from blog.models import Post from blog.serializers import PostSerializer from blog.docs.drf.viewsets import POST_SCHEMA from core.permissions import EvibesPermission @extend_schema_view(**POST_SCHEMA) class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg] __doc__ = _( # type: ignore [assignment] "Encapsulates operations for managing and retrieving Post entities in a read-only model view set.\n\n" "This class is tailored to handle Post objects that are active and allows filtration based on defined " "filters. It integrates with Django's backend filtering system and ensures operations align with the " "defined permissions. The view set also includes an additional 'retrieve' permission configuration.\n\n" "Attributes:\n" " serializer_class: Specifies the serializer to be used for Post objects.\n" " permission_classes: Defines the permissions required to interact with this view set.\n" " queryset: Determines the initial queryset, filtered to include only active Post objects.\n" " filter_backends: Lists the backends to be used for filtering querysets.\n" " filterset_class: Defines the set of filters used for filtering Post objects.\n" " additional: Contains additional configuration, such as specific action permissions." ) serializer_class = PostSerializer permission_classes = (EvibesPermission,) queryset = Post.objects.filter(is_active=True) filter_backends = [DjangoFilterBackend] filterset_class = PostFilter additional = {"retrieve": "ALLOW"}