gault-millau/apps/news/views/common.py
2019-08-23 15:29:55 +03:00

64 lines
2.1 KiB
Python

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('-is_highlighted', '-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()