From 1a6828b53e397e21edb8528863e34e4bb364dbc2 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 21 Jan 2020 15:48:37 +0300 Subject: [PATCH] fix news ordering --- apps/news/models.py | 10 ++++++++++ apps/news/views.py | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/news/models.py b/apps/news/models.py index fffed321..e4908368 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -144,6 +144,16 @@ class NewsQuerySet(TranslationQuerysetMixin): def by_locale(self, locale): return self.filter(title__icontains=locale) + def annotate_is_null_publication(self): + return self.annotate( + is_null_publication=Case( + When(publication_date__isnull=True, then=True), + When(publication_time__isnull=True, then=True), + default=False, + output_field=models.BooleanField(default=False), + ) + ) + class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin): diff --git a/apps/news/views.py b/apps/news/views.py index d63fc554..06278dbf 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -126,15 +126,15 @@ class NewsBackOfficeLCView(NewsBackOfficeMixinView, def get_queryset(self): """Override get_queryset method.""" - qs = super().get_queryset().with_extended_related() + qs = super().get_queryset().with_extended_related().annotate_is_null_publication() 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') + .replace('-publication_datetime', 'is_null_publication,-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') + .replace('publication_datetime', 'is_null_publication,publication_date,publication_time') self.request.GET._mutable = False if self.request.country_code: qs = qs.by_country_code(self.request.country_code)