From 5ef58b8202c9ceeda73853a951c74cc2a452a449 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 21 Jan 2020 15:15:32 +0300 Subject: [PATCH] news ordering --- apps/news/views.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/news/views.py b/apps/news/views.py index 178c359f..d63fc554 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -3,6 +3,8 @@ from django.conf import settings from django.shortcuts import get_object_or_404 from django.utils import translation from rest_framework import generics, permissions, response +from rest_framework.filters import OrderingFilter +from django_filters.rest_framework import DjangoFilterBackend from news import filters, models, serializers from rating.tasks import add_rating @@ -111,9 +113,11 @@ class NewsBackOfficeLCView(NewsBackOfficeMixinView, serializer_class = serializers.NewsBackOfficeBaseSerializer filter_class = filters.NewsListFilterSet create_serializers_class = serializers.NewsBackOfficeDetailSerializer - + filter_backends = (OrderingFilter, DjangoFilterBackend) permission_classes = [IsCountryAdmin | IsContentPageManager] + ordering_fields = '__all__' + def get_serializer_class(self): """Override serializer class.""" if self.request.method == 'POST': @@ -123,6 +127,15 @@ class NewsBackOfficeLCView(NewsBackOfficeMixinView, def get_queryset(self): """Override get_queryset method.""" qs = super().get_queryset().with_extended_related() + if 'ordering' in self.request.query_params: + self.request.GET._mutable = True + if '-publication_datetime' in self.request.query_params['ordering']: + self.request.query_params['ordering'] = self.request.query_params['ordering']\ + .replace('-publication_datetime', '-publication_date,-publication_time') + elif 'publication_datetime' in self.request.query_params['ordering']: + self.request.query_params['ordering'] = self.request.query_params['ordering']\ + .replace('publication_datetime', 'publication_date,publication_time') + self.request.GET._mutable = False if self.request.country_code: qs = qs.by_country_code(self.request.country_code) return qs