From 7d0acba51b04b4156bd07c4e45a0a956509b6377 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Fri, 25 Oct 2019 16:18:16 +0300 Subject: [PATCH] added to same_theme and should_read preview_image_url, added UniqueConstraint to NewsGallery model --- .../migrations/0029_auto_20191025_1241.py | 18 +++++++++++++++ apps/news/models.py | 2 +- apps/news/serializers.py | 22 +++++++++++-------- apps/news/views.py | 2 +- 4 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 apps/news/migrations/0029_auto_20191025_1241.py diff --git a/apps/news/migrations/0029_auto_20191025_1241.py b/apps/news/migrations/0029_auto_20191025_1241.py new file mode 100644 index 00000000..8e5bcba4 --- /dev/null +++ b/apps/news/migrations/0029_auto_20191025_1241.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-10-25 12:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0003_auto_20191003_1228'), + ('news', '0028_auto_20191024_1649'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='newsgallery', + unique_together={('news', 'image'), ('news', 'is_main')}, + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index dbb2f5bf..9b7190e4 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -235,4 +235,4 @@ class NewsGallery(models.Model): """NewsGallery meta class.""" verbose_name = _('news gallery') verbose_name_plural = _('news galleries') - unique_together = ('news', 'is_main') + unique_together = (('news', 'is_main'), ('news', 'image')) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 27d50977..1389d20e 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -150,6 +150,17 @@ class NewsBaseSerializer(ProjectModelSerializer): ) +class NewsSimilarListSerializer(NewsBaseSerializer): + """List serializer for News model.""" + preview_image_url = serializers.URLField() + + class Meta(NewsBaseSerializer.Meta): + """Meta class.""" + fields = NewsBaseSerializer.Meta.fields + ( + 'preview_image_url', + ) + + class NewsListSerializer(NewsBaseSerializer): """List serializer for News model.""" @@ -192,8 +203,8 @@ class NewsDetailSerializer(NewsBaseSerializer): class NewsDetailWebSerializer(NewsDetailSerializer): """News detail serializer for web users..""" - same_theme = NewsBaseSerializer(many=True, read_only=True) - should_read = NewsBaseSerializer(many=True, read_only=True) + same_theme = NewsSimilarListSerializer(many=True, read_only=True) + should_read = NewsSimilarListSerializer(many=True, read_only=True) agenda = AgendaSerializer() banner = NewsBannerSerializer() @@ -266,7 +277,6 @@ class NewsBackOfficeGallerySerializer(serializers.ModelSerializer): """Override validate method.""" news_pk = self.get_request_kwargs().get('pk') image_id = self.get_request_kwargs().get('image_id') - is_main = attrs.get('is_main') news_qs = models.News.objects.filter(pk=news_pk) image_qs = Image.objects.filter(id=image_id) @@ -279,12 +289,6 @@ class NewsBackOfficeGallerySerializer(serializers.ModelSerializer): news = news_qs.first() image = image_qs.first() - if news.news_gallery.filter(image=image).exists(): - raise serializers.ValidationError({'detail': _('Image is already added')}) - - if is_main and news.news_gallery.main_image().exists(): - raise serializers.ValidationError({'detail': _('Main image is already added')}) - attrs['news'] = news attrs['image'] = image diff --git a/apps/news/views.py b/apps/news/views.py index 9cd5d969..9cbe6b53 100644 --- a/apps/news/views.py +++ b/apps/news/views.py @@ -119,7 +119,7 @@ class NewsBackOfficeGalleryCreateDestroyView(NewsBackOfficeMixinView, return gallery def create(self, request, *args, **kwargs): - """Override create method""" + """Overridden create method""" super().create(request, *args, **kwargs) return Response(status=status.HTTP_201_CREATED)