change news states
This commit is contained in:
parent
a0aad97a4d
commit
4604c81ede
18
apps/news/migrations/0053_auto_20200128_1431.py
Normal file
18
apps/news/migrations/0053_auto_20200128_1431.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.7 on 2020-01-28 14:31
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('news', '0052_auto_20200121_0940'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='news',
|
||||||
|
name='state',
|
||||||
|
field=models.PositiveSmallIntegerField(choices=[(0, 'remove'), (1, 'hidden'), (2, 'published'), (3, 'not published')], default=3, verbose_name='State'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -101,6 +101,10 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
||||||
"""Return qs with related objects."""
|
"""Return qs with related objects."""
|
||||||
return self.select_related('created_by', 'agenda', 'banner')
|
return self.select_related('created_by', 'agenda', 'banner')
|
||||||
|
|
||||||
|
def visible(self):
|
||||||
|
"""Narrows qs by excluding invisible for API (at all) news"""
|
||||||
|
return self.exclude(state=self.model.REMOVE)
|
||||||
|
|
||||||
def by_type(self, news_type):
|
def by_type(self, news_type):
|
||||||
"""Filter News by type"""
|
"""Filter News by type"""
|
||||||
return self.filter(news_type__name=news_type)
|
return self.filter(news_type__name=news_type)
|
||||||
|
|
@ -259,18 +263,18 @@ class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
|
||||||
)
|
)
|
||||||
|
|
||||||
# STATE CHOICES
|
# STATE CHOICES
|
||||||
WAITING = 0
|
REMOVE = 0
|
||||||
HIDDEN = 1
|
HIDDEN = 1
|
||||||
PUBLISHED = 2
|
PUBLISHED = 2
|
||||||
PUBLISHED_EXCLUSIVE = 3
|
UNPUBLISHED = 3
|
||||||
|
|
||||||
PUBLISHED_STATES = [PUBLISHED, PUBLISHED_EXCLUSIVE]
|
PUBLISHED_STATES = [PUBLISHED]
|
||||||
|
|
||||||
STATE_CHOICES = (
|
STATE_CHOICES = (
|
||||||
(WAITING, _('Waiting')),
|
(REMOVE, _('remove')), # simply stored in DB news. not shown anywhere
|
||||||
(HIDDEN, _('Hidden')),
|
(HIDDEN, _('hidden')), # not shown in api/web or api/mobile
|
||||||
(PUBLISHED, _('Published')),
|
(PUBLISHED, _('published')), # shown everywhere
|
||||||
(PUBLISHED_EXCLUSIVE, _('Published exclusive')),
|
(UNPUBLISHED, _('not published')), # newly created news
|
||||||
)
|
)
|
||||||
|
|
||||||
INTERNATIONAL_TAG_VALUE = 'international'
|
INTERNATIONAL_TAG_VALUE = 'international'
|
||||||
|
|
@ -302,7 +306,7 @@ class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
|
||||||
slugs = HStoreField(null=True, blank=True, default=dict,
|
slugs = HStoreField(null=True, blank=True, default=dict,
|
||||||
verbose_name=_('Slugs for current news obj'),
|
verbose_name=_('Slugs for current news obj'),
|
||||||
help_text='{"en-GB":"some slug"}')
|
help_text='{"en-GB":"some slug"}')
|
||||||
state = models.PositiveSmallIntegerField(default=WAITING, choices=STATE_CHOICES,
|
state = models.PositiveSmallIntegerField(default=UNPUBLISHED, choices=STATE_CHOICES,
|
||||||
verbose_name=_('State'))
|
verbose_name=_('State'))
|
||||||
is_highlighted = models.BooleanField(default=False,
|
is_highlighted = models.BooleanField(default=False,
|
||||||
verbose_name=_('Is highlighted'))
|
verbose_name=_('Is highlighted'))
|
||||||
|
|
@ -347,7 +351,7 @@ class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin,
|
||||||
|
|
||||||
def create_duplicate(self, new_country, view_count_model):
|
def create_duplicate(self, new_country, view_count_model):
|
||||||
self.pk = None
|
self.pk = None
|
||||||
self.state = self.WAITING
|
self.state = self.UNPUBLISHED
|
||||||
self.slugs = {locale: f'{slug}-{new_country.code}' for locale, slug in self.slugs.items()}
|
self.slugs = {locale: f'{slug}-{new_country.code}' for locale, slug in self.slugs.items()}
|
||||||
self.country = new_country
|
self.country = new_country
|
||||||
self.views_count = view_count_model
|
self.views_count = view_count_model
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ from news import filters, models, serializers
|
||||||
from rating.tasks import add_rating
|
from rating.tasks import add_rating
|
||||||
from utils.permissions import IsCountryAdmin, IsContentPageManager
|
from utils.permissions import IsCountryAdmin, IsContentPageManager
|
||||||
from utils.views import CreateDestroyGalleryViewMixin, FavoritesCreateDestroyMixinView, CarouselCreateDestroyMixinView
|
from utils.views import CreateDestroyGalleryViewMixin, FavoritesCreateDestroyMixinView, CarouselCreateDestroyMixinView
|
||||||
from utils.serializers import ImageBaseSerializer, EmptySerializer
|
from utils.serializers import ImageBaseSerializer
|
||||||
|
|
||||||
|
|
||||||
class NewsMixinView:
|
class NewsMixinView:
|
||||||
|
|
@ -24,6 +24,7 @@ class NewsMixinView:
|
||||||
"""Override get_queryset method."""
|
"""Override get_queryset method."""
|
||||||
qs = models.News.objects.published() \
|
qs = models.News.objects.published() \
|
||||||
.with_base_related() \
|
.with_base_related() \
|
||||||
|
.visible() \
|
||||||
.annotate_in_favorites(self.request.user) \
|
.annotate_in_favorites(self.request.user) \
|
||||||
.order_by('-is_highlighted', '-publication_date', '-publication_time')
|
.order_by('-is_highlighted', '-publication_date', '-publication_time')
|
||||||
|
|
||||||
|
|
@ -41,7 +42,7 @@ class NewsMixinView:
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
instance = self.get_queryset().filter(
|
instance = self.get_queryset().visible().with_base_related().filter(
|
||||||
slugs__values__contains=[self.kwargs['slug']]
|
slugs__values__contains=[self.kwargs['slug']]
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user