From 785d2a2f0987ba09c1fd5907245d217097fc75d4 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 27 Sep 2019 16:56:26 +0300 Subject: [PATCH 1/2] update news serializer, RUD for backoffice --- apps/news/migrations/0016_news_template.py | 18 ++++++++++++++++++ apps/news/models.py | 12 ++++++++++++ apps/news/serializers.py | 5 +++++ 3 files changed, 35 insertions(+) create mode 100644 apps/news/migrations/0016_news_template.py diff --git a/apps/news/migrations/0016_news_template.py b/apps/news/migrations/0016_news_template.py new file mode 100644 index 00000000..f85959ba --- /dev/null +++ b/apps/news/migrations/0016_news_template.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-09-27 13:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0015_auto_20190927_0853'), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='template', + field=models.PositiveIntegerField(choices=[(0, 'newspaper'), (1, 'main.pdf.erb'), (2, 'main')], default=0), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index 4fb8e118..e0c5fbf4 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -49,6 +49,17 @@ class NewsQuerySet(models.QuerySet): class News(BaseAttributes, TranslatedFieldsMixin): """News model.""" + # template choices + NEWSPAPER = 0 + MAIN_PDF_ERB = 1 + MAIN = 2 + + TEMPLATE_CHOICES = ( + (NEWSPAPER, 'newspaper'), + (MAIN_PDF_ERB, 'main.pdf.erb'), + (MAIN, 'main'), + ) + news_type = models.ForeignKey(NewsType, on_delete=models.PROTECT, verbose_name=_('news type')) title = TJSONField(blank=True, null=True, default=None, @@ -78,6 +89,7 @@ class News(BaseAttributes, TranslatedFieldsMixin): verbose_name=_('Image URL path')) preview_image_url = models.URLField(blank=True, null=True, default=None, verbose_name=_('Preview image URL path')) + template = models.PositiveIntegerField(choices=TEMPLATE_CHOICES, default=NEWSPAPER) address = models.ForeignKey('location.Address', blank=True, null=True, default=None, verbose_name=_('address'), on_delete=models.SET_NULL) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 3d15cff9..82f9980b 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -89,6 +89,9 @@ class NewsBackOfficeDetailSerializer(NewsBackOfficeBaseSerializer, source='country', write_only=True, queryset=location_models.Country.objects.all()) + template_display = serializers.CharField(source='get_template_display', + read_only=True) + class Meta(NewsBackOfficeBaseSerializer.Meta, NewsDetailSerializer.Meta): """Meta class.""" @@ -97,5 +100,7 @@ class NewsBackOfficeDetailSerializer(NewsBackOfficeBaseSerializer, 'description', 'news_type_id', 'country_id', + 'template', + 'template_display', ) From 03753f9059d673138e76b01a9a7f141c76874810 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 27 Sep 2019 17:16:40 +0300 Subject: [PATCH 2/2] News model, state --- .../migrations/0017_auto_20190927_1403.py | 22 ++++++++++++++ apps/news/models.py | 29 ++++++++++++++++--- apps/news/serializers.py | 6 ++-- 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 apps/news/migrations/0017_auto_20190927_1403.py diff --git a/apps/news/migrations/0017_auto_20190927_1403.py b/apps/news/migrations/0017_auto_20190927_1403.py new file mode 100644 index 00000000..1886dcec --- /dev/null +++ b/apps/news/migrations/0017_auto_20190927_1403.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.4 on 2019-09-27 14:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0016_news_template'), + ] + + operations = [ + migrations.RemoveField( + model_name='news', + name='is_publish', + ), + migrations.AddField( + model_name='news', + name='state', + field=models.PositiveSmallIntegerField(choices=[(0, 'Waiting'), (1, 'Hidden'), (2, 'Published'), (3, 'Published exclusive')], default=0, verbose_name='State'), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index e0c5fbf4..9273a1bd 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -39,7 +39,7 @@ class NewsQuerySet(models.QuerySet): now = timezone.now() return self.filter(models.Q(models.Q(end__gte=now) | models.Q(end__isnull=True)), - is_publish=True, start__lte=now) + state__in=[self.model.PUBLISHED_STATES], start__lte=now) def with_related(self): """Return qs with related objects.""" @@ -49,7 +49,9 @@ class NewsQuerySet(models.QuerySet): class News(BaseAttributes, TranslatedFieldsMixin): """News model.""" - # template choices + STR_FIELD_NAME = 'title' + + # TEMPLATE CHOICES NEWSPAPER = 0 MAIN_PDF_ERB = 1 MAIN = 2 @@ -60,6 +62,21 @@ class News(BaseAttributes, TranslatedFieldsMixin): (MAIN, 'main'), ) + # STATE CHOICES + WAITING = 0 + HIDDEN = 1 + PUBLISHED = 2 + PUBLISHED_EXCLUSIVE = 3 + + PUBLISHED_STATES = [PUBLISHED, PUBLISHED_EXCLUSIVE] + + STATE_CHOICES = ( + (WAITING, _('Waiting')), + (HIDDEN, _('Hidden')), + (PUBLISHED, _('Published')), + (PUBLISHED_EXCLUSIVE, _('Published exclusive')), + ) + news_type = models.ForeignKey(NewsType, on_delete=models.PROTECT, verbose_name=_('news type')) title = TJSONField(blank=True, null=True, default=None, @@ -77,8 +94,8 @@ class News(BaseAttributes, TranslatedFieldsMixin): slug = models.SlugField(unique=True, max_length=50, verbose_name=_('News slug')) playlist = models.IntegerField(_('playlist')) - is_publish = models.BooleanField(default=False, - verbose_name=_('Publish status')) + state = models.PositiveSmallIntegerField(default=WAITING, choices=STATE_CHOICES, + verbose_name=_('State')) author = models.CharField(max_length=255, blank=True, null=True, default=None,verbose_name=_('Author')) is_highlighted = models.BooleanField(default=False, @@ -109,6 +126,10 @@ class News(BaseAttributes, TranslatedFieldsMixin): def __str__(self): return f'news: {self.slug}' + @property + def is_publish(self): + return self.state in self.PUBLISHED_STATES + @property def web_url(self): return reverse('web:news:rud', kwargs={'slug': self.slug}) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 82f9980b..2677ce0f 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -50,6 +50,8 @@ class NewsDetailSerializer(NewsBaseSerializer): description_translated = TranslatedField() country = CountrySimpleSerializer(read_only=True) + state_display = serializers.CharField(source='get_state_display', + read_only=True) class Meta(NewsBaseSerializer.Meta): """Meta class.""" @@ -60,6 +62,8 @@ class NewsDetailSerializer(NewsBaseSerializer): 'end', 'playlist', 'is_publish', + 'state', + 'state_display', 'author', 'country', ) @@ -84,11 +88,9 @@ class NewsBackOfficeDetailSerializer(NewsBackOfficeBaseSerializer, news_type_id = serializers.PrimaryKeyRelatedField( source='news_type', write_only=True, queryset=models.NewsType.objects.all()) - country_id = serializers.PrimaryKeyRelatedField( source='country', write_only=True, queryset=location_models.Country.objects.all()) - template_display = serializers.CharField(source='get_template_display', read_only=True)