fix news ordering

This commit is contained in:
Kuroshini 2020-01-21 15:48:37 +03:00
parent 5ef58b8202
commit 1a6828b53e
2 changed files with 13 additions and 3 deletions

View File

@ -144,6 +144,16 @@ class NewsQuerySet(TranslationQuerysetMixin):
def by_locale(self, locale): def by_locale(self, locale):
return self.filter(title__icontains=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, class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
FavoritesMixin): FavoritesMixin):

View File

@ -126,15 +126,15 @@ class NewsBackOfficeLCView(NewsBackOfficeMixinView,
def get_queryset(self): def get_queryset(self):
"""Override get_queryset method.""" """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: if 'ordering' in self.request.query_params:
self.request.GET._mutable = True self.request.GET._mutable = True
if '-publication_datetime' in self.request.query_params['ordering']: if '-publication_datetime' in self.request.query_params['ordering']:
self.request.query_params['ordering'] = 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']: elif 'publication_datetime' in self.request.query_params['ordering']:
self.request.query_params['ordering'] = 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 self.request.GET._mutable = False
if self.request.country_code: if self.request.country_code:
qs = qs.by_country_code(self.request.country_code) qs = qs.by_country_code(self.request.country_code)