from rest_framework import generics, permissions from news import filters from news.models import News, NewsType from news.serializers import common as serializers from utils.views import (JWTGenericViewMixin, JWTListAPIView) # Mixins class NewsViewMixin(JWTGenericViewMixin): """View mixin for News model""" def get_queryset(self, *args, **kwargs): """Override get_queryset method""" return News.objects.annotate_localized_fields(locale=self.request.locale) class NewsList(NewsViewMixin, JWTListAPIView): """News list view.""" permission_classes = (permissions.AllowAny, ) serializer_class = serializers.NewsSerializer filter_class = filters.NewsListFilterSet def get_queryset(self, *args, **kwargs): """Override get_queryset method""" return News.objects.annotate_localized_fields(locale=self.request.locale)\ .published()\ .by_country_code(code=self.request.country_code)\ .order_by('-created') class NewsCreate(generics.CreateAPIView): """News list view.""" queryset = News.objects.all() permission_classes = (permissions.IsAuthenticated, ) serializer_class = serializers.NewsCreateUpdateSerializer class NewsDetail(NewsViewMixin, generics.RetrieveAPIView): """News detail view.""" permission_classes = (permissions.AllowAny, ) serializer_class = serializers.NewsSerializer class NewsDelete(generics.DestroyAPIView): """News delete view.""" queryset = News.objects.all() permission_classes = (permissions.IsAuthenticated, ) class NewsUpdate(NewsViewMixin, generics.UpdateAPIView): """News update view.""" permission_classes = (permissions.IsAuthenticated, ) serializer_class = serializers.NewsCreateUpdateSerializer class NewsTypeList(generics.ListAPIView): """NewsType list view.""" serializer_class = serializers.NewsTypeSerializer permission_classes = (permissions.AllowAny, ) pagination_class = None queryset = NewsType.objects.all()