From ad43e4a5f92df5ac1c1d919fea4f4987b5219227 Mon Sep 17 00:00:00 2001 From: dormantman Date: Thu, 16 Jan 2020 15:47:01 +0300 Subject: [PATCH] Added new route preview/slug// --- apps/news/serializers.py | 20 ++++++++++++++++++++ apps/news/urls/common.py | 1 + apps/news/views.py | 12 ++++++++++++ 3 files changed, 33 insertions(+) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index c0df73a4..d9050620 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -176,6 +176,26 @@ class NewsDetailWebSerializer(NewsDetailSerializer): return NewsSimilarListSerializer(obj.should_read(self.context['request'].user), many=True, read_only=True).data +class NewsPreviewWebSerializer(NewsDetailSerializer): + """News preview serializer for web users..""" + + same_theme = SerializerMethodField() + agenda = AgendaSerializer() + banner = NewsBannerSerializer() + + class Meta(NewsDetailSerializer.Meta): + """Meta class.""" + + fields = NewsDetailSerializer.Meta.fields + ( + 'same_theme', + 'agenda', + 'banner', + ) + + def get_same_theme(self, obj): + return NewsSimilarListSerializer(obj.same_theme(self.context['request'].user), many=True, read_only=True).data + + class NewsBackOfficeBaseSerializer(NewsBaseSerializer): """News back office base serializer.""" is_published = serializers.BooleanField(source='is_publish', read_only=True) diff --git a/apps/news/urls/common.py b/apps/news/urls/common.py index f5c809de..4668bbfc 100644 --- a/apps/news/urls/common.py +++ b/apps/news/urls/common.py @@ -7,4 +7,5 @@ common_urlpatterns = [ path('slug//', views.NewsDetailView.as_view(), name='rud'), path('slug//favorites/', views.NewsFavoritesCreateDestroyView.as_view(), name='create-destroy-favorites'), + path('preview/slug//', views.NewsPreviewView.as_view(), name='preview'), ] diff --git a/apps/news/views.py b/apps/news/views.py index 80f70b79..178c359f 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -70,6 +70,18 @@ class NewsDetailView(NewsMixinView, generics.RetrieveAPIView): return qs +class NewsPreviewView(NewsMixinView, generics.RetrieveAPIView): + """News preview view.""" + + lookup_field = None + serializer_class = serializers.NewsPreviewWebSerializer + + def get_queryset(self): + """Override get_queryset method.""" + qs = models.News.objects.all().annotate_in_favorites(self.request.user) + return qs + + class NewsTypeListView(generics.ListAPIView): """NewsType list view."""