diff --git a/apps/establishment/models.py b/apps/establishment/models.py index ba34098d..589c2e22 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -14,10 +14,8 @@ from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField from collection.models import Collection -from main.models import MetaDataContent +from main.models import Award, MetaDataContent from location.models import Address -from collection.models import Collection -from main.models import Award from review.models import Review from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin, TranslatedFieldsMixin, BaseAttributes) @@ -335,9 +333,9 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin): @property def vintage_year(self): - review_qs = self.reviews.by_status(Review.READY) - if review_qs.exists(): - return review_qs.last().vintage + last_review = self.reviews.by_status(Review.READY).last() + if last_review: + return last_review.vintage @property def best_price_menu(self): @@ -367,10 +365,8 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin): @property def the_most_recent_award(self): - awards = Award.objects.filter(Q(establishment=self) | Q(employees__establishments=self)) - if awards: - return awards.latest(field_name='vintage_year') - return {} + return Award.objects.filter(Q(establishment=self) | Q(employees__establishments=self)).latest( + field_name='vintage_year') class Position(BaseAttributes, TranslatedFieldsMixin): diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index fa7d4b63..5e74b178 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -198,8 +198,8 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer): menu = MenuSerializers(source='menu_set', many=True, read_only=True) best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True) - vintage_year = serializers.ReadOnlyField() + class Meta(EstablishmentListSerializer.Meta): """Meta class.""" diff --git a/apps/main/models.py b/apps/main/models.py index 6d4305d4..2270cbf9 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -318,9 +318,9 @@ class Carousel(models.Model): @property def vintage_year(self): if hasattr(self.content_object, 'reviews'): - review_qs = self.content_object.reviews.by_status(Review.READY) - if review_qs.exists(): - return review_qs.last().vintage + last_review = self.content_object.reviews.by_status(Review.READY).last() + if last_review: + return last_review.vintage @property def toque_number(self): @@ -342,6 +342,11 @@ class Carousel(models.Model): if hasattr(self.content_object, 'slug'): return self.content_object.slug + @property + def the_most_recent_award(self): + if hasattr(self.content_object, 'the_most_recent_award'): + return self.content_object.the_most_recent_award + @property def model_name(self): return self.content_object.__class__.__name__ diff --git a/apps/main/serializers.py b/apps/main/serializers.py index 6395e25f..03ea73e6 100644 --- a/apps/main/serializers.py +++ b/apps/main/serializers.py @@ -142,7 +142,7 @@ class CarouselListSerializer(serializers.ModelSerializer): image = serializers.URLField(source='image_url') awards = AwardBaseSerializer(many=True) vintage_year = serializers.IntegerField() - last_award = serializers.SerializerMethodField() + last_award = AwardBaseSerializer(source='the_most_recent_award', allow_null=True) class Meta: """Meta class.""" @@ -160,11 +160,6 @@ class CarouselListSerializer(serializers.ModelSerializer): 'slug', ] - def get_last_award(self, obj): - if isinstance(obj.content_object, Establishment): - award = obj.content_object.the_most_recent_award - return AwardBaseSerializer().to_representation(award) if award else None - return None class PageSerializer(serializers.ModelSerializer): page_name = serializers.CharField()