diff --git a/apps/news/filters.py b/apps/news/filters.py new file mode 100644 index 00000000..75e66c36 --- /dev/null +++ b/apps/news/filters.py @@ -0,0 +1,17 @@ +"""Filters from application News""" +import django_filters + +from news import models + + +class NewsListFilterSet(django_filters.FilterSet): + """FilterSet for News list""" + + is_highlighted = django_filters.BooleanFilter() + + class Meta: + """Meta class""" + model = models.News + fields = ( + 'is_highlighted', + ) diff --git a/apps/news/migrations/0005_auto_20190823_1149.py b/apps/news/migrations/0005_auto_20190823_1149.py new file mode 100644 index 00000000..d2b9cc67 --- /dev/null +++ b/apps/news/migrations/0005_auto_20190823_1149.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.4 on 2019-08-23 11:49 + +from django.db import migrations, models +import easy_thumbnails.fields +import utils.methods + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0004_auto_20190823_1034'), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='image', + field=easy_thumbnails.fields.ThumbnailerImageField(blank=True, default=None, null=True, upload_to=utils.methods.image_path, verbose_name='Image'), + ), + migrations.AddField( + model_name='news', + name='is_highlighted', + field=models.BooleanField(default=False, verbose_name='Is highlighted'), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index 2dc4cbc4..addb600d 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -2,7 +2,8 @@ from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ -from utils.models import ProjectBaseMixin, BaseAttributes, LocaleManagerMixin +from utils.models import (ProjectBaseMixin, BaseAttributes, + LocaleManagerMixin, ImageMixin) class NewsType(models.Model): @@ -36,7 +37,7 @@ class NewsQuerySet(models.QuerySet): return self.filter(is_publish=True) -class News(BaseAttributes): +class News(ImageMixin, BaseAttributes): """News model.""" news_type = models.ForeignKey( NewsType, verbose_name=_('news type'), on_delete=models.CASCADE) @@ -63,6 +64,8 @@ class News(BaseAttributes): country = models.ForeignKey( 'location.Country', blank=True, null=True, verbose_name=_('country'), on_delete=models.CASCADE) + is_highlighted = models.BooleanField( + default=False, verbose_name=_('Is highlighted')) # TODO: metadata_keys - описание ключей для динамического построения полей метаданных # TODO: metadata_values - Описание значений для динамических полей из MetadataKeys diff --git a/apps/news/serializers/common.py b/apps/news/serializers/common.py index e83d957c..a5ad71a5 100644 --- a/apps/news/serializers/common.py +++ b/apps/news/serializers/common.py @@ -36,6 +36,8 @@ class NewsSerializer(NewsLocalizationMixinSerializer): 'end', 'playlist', 'address', + 'is_highlighted', + 'image', # Localized fields 'title_trans', 'subtitle_trans', diff --git a/apps/news/views/common.py b/apps/news/views/common.py index 6939ec2a..b93af312 100644 --- a/apps/news/views/common.py +++ b/apps/news/views/common.py @@ -1,5 +1,6 @@ from rest_framework import generics, permissions +from news import filters from news.models import News, NewsType from news.serializers import common as serializers from utils.views import (JWTGenericViewMixin, @@ -19,12 +20,14 @@ class NewsList(NewsViewMixin, JWTListAPIView): """News list view.""" permission_classes = (permissions.AllowAny, ) serializer_class = serializers.NewsSerializer + filter_class = filters.NewsListFilterSet def get_queryset(self, *args, **kwargs): """Override get_queryset method""" return News.objects.annotate_localized_fields(locale=self.request.locale)\ .published()\ - .by_country_code(code=self.request.country_code) + .by_country_code(code=self.request.country_code)\ + .order_by('-created') class NewsCreate(generics.CreateAPIView):