From b7e64a0b263c9fc499b060c28483c94d57ff38fc Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Fri, 7 Feb 2020 15:09:11 +0300 Subject: [PATCH] is main establishment gallery --- apps/gallery/models.py | 6 ++++++ apps/gallery/serializers.py | 14 ++++++++++++-- apps/gallery/views.py | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/gallery/models.py b/apps/gallery/models.py index cc51af11..6933af55 100644 --- a/apps/gallery/models.py +++ b/apps/gallery/models.py @@ -69,6 +69,12 @@ class Image(BaseAttributes, SORLImageMixin, PlatformMixin): else: file_object.Acl().put(ACL='authenticated-read') + @property + def is_main(self) -> bool: + establishment_gallery_list = list(self.establishment_gallery.all()) + if establishment_gallery_list and len(establishment_gallery_list): + return establishment_gallery_list[0].is_main + @property def type(self) -> str: if self.image: diff --git a/apps/gallery/serializers.py b/apps/gallery/serializers.py index 0e50b231..dad6e2de 100644 --- a/apps/gallery/serializers.py +++ b/apps/gallery/serializers.py @@ -6,7 +6,7 @@ from sorl.thumbnail.parsers import parse_crop, ThumbnailParseError from django.utils.translation import gettext_lazy as _ from django.conf import settings from django.shortcuts import get_object_or_404 -from establishment.models import Establishment +from establishment.models import Establishment, EstablishmentGallery from account.serializers.common import UserBaseSerializer from . import models @@ -53,6 +53,7 @@ class EstablishmentGallerySerializer(serializers.ModelSerializer): type = serializers.ChoiceField(read_only=True, choices=models.Image.MEDIA_TYPES) created_by = UserBaseSerializer(read_only=True, allow_null=True) image_size_in_KB = serializers.DecimalField(read_only=True, decimal_places=2, max_digits=20) + is_main = serializers.BooleanField() class Meta: model = models.Image @@ -65,6 +66,7 @@ class EstablishmentGallerySerializer(serializers.ModelSerializer): 'preview', 'is_public', 'title', + 'is_main', 'created_by', 'image_size_in_KB', ) @@ -82,20 +84,28 @@ class EstablishmentGallerySerializer(serializers.ModelSerializer): return attrs def create(self, validated_data): + is_main = validated_data.pop('is_main') establishment = get_object_or_404(klass=Establishment, pk=self.context['view'].kwargs['establishment_id']) instance = super().create(validated_data) instance.created_by = self.context['request'].user instance.establishment_set.add(establishment) instance.save() + EstablishmentGallery.objects.filter( + image=instance + ).update(is_main=is_main) return instance def update(self, instance: models.Image, validated_data): if instance.is_public != validated_data.get('is_public'): instance.set_pubic(validated_data.get('is_public', True)) + if 'is_main' in validated_data: + is_main = validated_data.pop('is_main') + EstablishmentGallery.objects.filter( + image=instance + ).update(is_main=is_main) return super().update(instance, validated_data) - class CropImageSerializer(ImageSerializer): """Serializers for image crops.""" diff --git a/apps/gallery/views.py b/apps/gallery/views.py index 7dc99248..420af7a1 100644 --- a/apps/gallery/views.py +++ b/apps/gallery/views.py @@ -30,7 +30,7 @@ class MediaForEstablishmentView(ImageBaseView, generics.ListCreateAPIView): def get_queryset(self): return super().get_queryset().filter(establishment__pk=self.kwargs['establishment_id'])\ - .order_by('-order').prefetch_related('created_by') + .order_by('-order').prefetch_related('created_by', 'establishment_gallery') class MediaUpdateView(ImageBaseView, generics.UpdateAPIView):