From 6a9f11e98960892d3e9a0d1eb6792a0760b3452f Mon Sep 17 00:00:00 2001 From: Anatoly Date: Wed, 23 Oct 2019 15:31:04 +0300 Subject: [PATCH] merge from develop --- .../migrations/0014_merge_20191023_0959.py | 14 ++++++++ .../migrations/0023_merge_20191023_1000.py | 14 ++++++++ .../migrations/0024_newsgallery_is_main.py | 18 ++++++++++ apps/news/models.py | 16 ++++++--- apps/news/serializers.py | 33 +++++++++++++++++-- apps/news/views.py | 2 +- .../migrations/0003_merge_20191004_1401.py | 14 -------- .../migrations/0003_auto_20191002_0729.py | 17 ---------- project/settings/base.py | 15 ++++++++- project/settings/local.py | 8 ++--- 10 files changed, 108 insertions(+), 43 deletions(-) create mode 100644 apps/account/migrations/0014_merge_20191023_0959.py create mode 100644 apps/news/migrations/0023_merge_20191023_1000.py create mode 100644 apps/news/migrations/0024_newsgallery_is_main.py delete mode 100644 apps/rating/migrations/0003_merge_20191004_1401.py delete mode 100644 apps/timetable/migrations/0003_auto_20191002_0729.py diff --git a/apps/account/migrations/0014_merge_20191023_0959.py b/apps/account/migrations/0014_merge_20191023_0959.py new file mode 100644 index 00000000..07ab850e --- /dev/null +++ b/apps/account/migrations/0014_merge_20191023_0959.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.4 on 2019-10-23 09:59 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0009_auto_20191002_0648'), + ('account', '0013_auto_20191016_0810'), + ] + + operations = [ + ] diff --git a/apps/news/migrations/0023_merge_20191023_1000.py b/apps/news/migrations/0023_merge_20191023_1000.py new file mode 100644 index 00000000..75dfd1b2 --- /dev/null +++ b/apps/news/migrations/0023_merge_20191023_1000.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.4 on 2019-10-23 10:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0021_merge_20191002_1300'), + ('news', '0022_auto_20191021_1306'), + ] + + operations = [ + ] diff --git a/apps/news/migrations/0024_newsgallery_is_main.py b/apps/news/migrations/0024_newsgallery_is_main.py new file mode 100644 index 00000000..aa7fffd9 --- /dev/null +++ b/apps/news/migrations/0024_newsgallery_is_main.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-10-23 10:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0023_merge_20191023_1000'), + ] + + operations = [ + migrations.AddField( + model_name='newsgallery', + name='is_main', + field=models.BooleanField(default=False, verbose_name='Is the main image'), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index 643a0143..246aadf0 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -146,10 +146,6 @@ class News(BaseAttributes, TranslatedFieldsMixin): verbose_name=_('State')) is_highlighted = models.BooleanField(default=False, verbose_name=_('Is highlighted')) - image_url = models.URLField(blank=True, null=True, default=None, - 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'), @@ -197,10 +193,18 @@ class News(BaseAttributes, TranslatedFieldsMixin): def same_theme(self): return self.__class__.objects.same_theme(self)[:3] + @property + def main_image(self): + return self.news_gallery.main_images().first().image + class NewsGalleryQuerySet(models.QuerySet): """QuerySet for model News""" + def main_images(self): + """Return objects with flag is_main is True""" + return self.filter(is_main=True) + class NewsGallery(models.Model): @@ -212,6 +216,10 @@ class NewsGallery(models.Model): related_name='news_gallery', on_delete=models.SET_NULL, verbose_name=_('gallery')) + is_main = models.BooleanField(default=False, + verbose_name=_('Is the main image')) + + objects = NewsGalleryQuerySet.as_manager() class Meta: """NewsGallery meta class.""" diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 658e4203..12c76e67 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -134,7 +134,6 @@ class NewsBaseSerializer(ProjectModelSerializer): # related fields news_type = NewsTypeSerializer(read_only=True) - gallery = NewsImageSerializer(read_only=True, many=True) tags = TagBaseSerializer(read_only=True, many=True) class Meta: @@ -149,7 +148,34 @@ class NewsBaseSerializer(ProjectModelSerializer): 'news_type', 'tags', 'slug', - 'gallery', + ) + + +class NewsListSerializer(NewsBaseSerializer): + """List serializer for News model.""" + + # read only fields + title_translated = TranslatedField() + subtitle_translated = TranslatedField() + + # related fields + news_type = NewsTypeSerializer(read_only=True) + tags = TagBaseSerializer(read_only=True, many=True) + image = NewsImageSerializer(source='main_image', allow_null=True) + + class Meta: + """Meta class.""" + + model = models.News + fields = ( + 'id', + 'title_translated', + 'subtitle_translated', + 'is_highlighted', + 'news_type', + 'tags', + 'slug', + 'image', ) @@ -161,6 +187,7 @@ class NewsDetailSerializer(NewsBaseSerializer): author = UserBaseSerializer(source='created_by', read_only=True) state_display = serializers.CharField(source='get_state_display', read_only=True) + gallery = NewsImageSerializer(read_only=True, many=True) class Meta(NewsBaseSerializer.Meta): """Meta class.""" @@ -175,6 +202,7 @@ class NewsDetailSerializer(NewsBaseSerializer): 'state_display', 'author', 'country', + 'gallery', ) @@ -242,6 +270,7 @@ class NewsBackOfficeGallerySerializer(serializers.ModelSerializer): model = models.NewsGallery fields = [ 'id', + 'is_main', ] def get_request_kwargs(self): diff --git a/apps/news/views.py b/apps/news/views.py index ba5719b0..c2a71eca 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -30,7 +30,7 @@ class NewsMixinView: class NewsListView(NewsMixinView, generics.ListAPIView): """News list view.""" - + serializer_class = serializers.NewsListSerializer filter_class = filters.NewsListFilterSet diff --git a/apps/rating/migrations/0003_merge_20191004_1401.py b/apps/rating/migrations/0003_merge_20191004_1401.py deleted file mode 100644 index f04cc893..00000000 --- a/apps/rating/migrations/0003_merge_20191004_1401.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-04 14:01 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('rating', '0002_auto_20191004_1217'), - ('rating', '0002_auto_20191004_0928'), - ] - - operations = [ - ] diff --git a/apps/timetable/migrations/0003_auto_20191002_0729.py b/apps/timetable/migrations/0003_auto_20191002_0729.py deleted file mode 100644 index 16196f74..00000000 --- a/apps/timetable/migrations/0003_auto_20191002_0729.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.4 on 2019-10-02 07:29 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('timetable', '0002_auto_20190919_1124'), - ] - - operations = [ - migrations.AlterModelOptions( - name='timetable', - options={'ordering': ['weekday'], 'verbose_name': 'Timetable', 'verbose_name_plural': 'Timetables'}, - ), - ] diff --git a/project/settings/base.py b/project/settings/base.py index 0e078f9f..cd0a63b0 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -369,7 +369,6 @@ SORL_THUMBNAIL_ALIASES = { 'avatar_comments_web': {'geometry_string': '116x116', 'crop': 'center'}, # через контент эдитор в мобильном браузерe } -GEOIP_PATH = os.path.join(PROJECT_ROOT, 'geoip_db') # JWT SIMPLE_JWT = { @@ -455,3 +454,17 @@ LIMITING_QUERY_OBJECTS = QUERY_OUTPUT_OBJECTS * 3 # GEO # A Spatial Reference System Identifier GEO_DEFAULT_SRID = 4326 +GEOIP_PATH = os.path.join(PROJECT_ROOT, 'geoip_db') + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ +STATIC_ROOT = os.path.join(PUBLIC_ROOT, 'static') +STATIC_URL = '/static/' + +STATICFILES_DIRS = ( + os.path.join(PROJECT_ROOT, 'static'), +) + + +# MEDIA +MEDIA_LOCATION = 'media' \ No newline at end of file diff --git a/project/settings/local.py b/project/settings/local.py index 4e219bfb..e87b99f6 100644 --- a/project/settings/local.py +++ b/project/settings/local.py @@ -31,6 +31,10 @@ MEDIA_URL = f'{SCHEMA_URI}://{DOMAIN_URI}/{MEDIA_LOCATION}/' MEDIA_ROOT = os.path.join(PUBLIC_ROOT, MEDIA_LOCATION) +# SORL thumbnails +THUMBNAIL_DEBUG = True + + # LOGGING LOGGING = { 'version': 1, @@ -84,7 +88,3 @@ ELASTICSEARCH_INDEX_NAMES = { TESTING = sys.argv[1:2] == ['test'] if TESTING: ELASTICSEARCH_INDEX_NAMES = {} - - -# SORL thumbnails -THUMBNAIL_DEBUG = True