Fix wines db queries
This commit is contained in:
parent
94d20469f6
commit
cc67499601
|
|
@ -5,7 +5,7 @@ from rest_framework import serializers
|
||||||
from comment import models as comment_models
|
from comment import models as comment_models
|
||||||
from comment.serializers import common as comment_serializers
|
from comment.serializers import common as comment_serializers
|
||||||
from establishment import models
|
from establishment import models
|
||||||
from location.serializers import AddressBaseSerializer, CitySerializer, AddressDetailSerializer
|
from location.serializers import AddressBaseSerializer, CitySerializer, AddressDetailSerializer, CityShortSerializer
|
||||||
from main.serializers import AwardSerializer, CurrencySerializer
|
from main.serializers import AwardSerializer, CurrencySerializer
|
||||||
from tag.serializers import TagBaseSerializer
|
from tag.serializers import TagBaseSerializer
|
||||||
from timetable.serialziers import ScheduleRUDSerializer
|
from timetable.serialziers import ScheduleRUDSerializer
|
||||||
|
|
@ -193,6 +193,28 @@ class EstablishmentShortSerializer(serializers.ModelSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentProductShortSerializer(serializers.ModelSerializer):
|
||||||
|
"""SHORT Serializer for displaying info about an establishment on product page."""
|
||||||
|
establishment_type = EstablishmentTypeGeoSerializer()
|
||||||
|
establishment_subtypes = EstablishmentSubTypeBaseSerializer(many=True)
|
||||||
|
address = AddressBaseSerializer()
|
||||||
|
city = CityShortSerializer(source='address.city', allow_null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
model = models.Establishment
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'index_name',
|
||||||
|
'slug',
|
||||||
|
'city',
|
||||||
|
'establishment_type',
|
||||||
|
'establishment_subtypes',
|
||||||
|
'address',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentProductSerializer(EstablishmentShortSerializer):
|
class EstablishmentProductSerializer(EstablishmentShortSerializer):
|
||||||
"""Serializer for displaying info about an establishment on product page."""
|
"""Serializer for displaying info about an establishment on product page."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,20 @@ class RegionSerializer(serializers.ModelSerializer):
|
||||||
'country_id'
|
'country_id'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
class CityShortSerializer(serializers.ModelSerializer):
|
||||||
|
"""Short city serializer"""
|
||||||
|
country = CountrySerializer(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class"""
|
||||||
|
model = models.City
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'code',
|
||||||
|
'country',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CitySerializer(serializers.ModelSerializer):
|
class CitySerializer(serializers.ModelSerializer):
|
||||||
"""City serializer."""
|
"""City serializer."""
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,12 @@ class ProductQuerySet(models.QuerySet):
|
||||||
def with_extended_related(self):
|
def with_extended_related(self):
|
||||||
"""Returns qs with almost all related objects."""
|
"""Returns qs with almost all related objects."""
|
||||||
return self.with_base_related() \
|
return self.with_base_related() \
|
||||||
.prefetch_related('tags', 'standards', 'classifications', 'classifications__standard',
|
.prefetch_related('tags', 'tags__category', 'tags__category__country',
|
||||||
|
'standards', 'classifications', 'classifications__standard',
|
||||||
|
'establishment__address', 'establishment__establishment_type',
|
||||||
|
'establishment__address__city', 'establishment__address__city__country',
|
||||||
|
'establishment__establishment_subtypes', 'product_gallery',
|
||||||
|
'gallery', 'product_type', 'subtypes',
|
||||||
'classifications__classification_type', 'classifications__tags') \
|
'classifications__classification_type', 'classifications__tags') \
|
||||||
.select_related('wine_region', 'wine_sub_region')
|
.select_related('wine_region', 'wine_sub_region')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from comment.models import Comment
|
from comment.models import Comment
|
||||||
from comment.serializers import CommentSerializer
|
from comment.serializers import CommentSerializer
|
||||||
from establishment.serializers import EstablishmentShortSerializer, EstablishmentProductSerializer
|
from establishment.serializers import EstablishmentShortSerializer, EstablishmentProductSerializer, EstablishmentProductShortSerializer
|
||||||
from gallery.models import Image
|
from gallery.models import Image
|
||||||
from product import models
|
from product import models
|
||||||
from review.serializers import ReviewShortSerializer
|
from review.serializers import ReviewShortSerializer
|
||||||
|
|
@ -12,13 +12,13 @@ from utils import exceptions as utils_exceptions
|
||||||
from utils.serializers import TranslatedField, FavoritesCreateSerializer
|
from utils.serializers import TranslatedField, FavoritesCreateSerializer
|
||||||
from main.serializers import AwardSerializer
|
from main.serializers import AwardSerializer
|
||||||
from location.serializers import WineRegionBaseSerializer, WineSubRegionBaseSerializer
|
from location.serializers import WineRegionBaseSerializer, WineSubRegionBaseSerializer
|
||||||
from tag.serializers import TagBaseSerializer, TagCategoryShortSerializer
|
from tag.serializers import TagBaseSerializer, TagCategoryProductSerializer
|
||||||
|
|
||||||
|
|
||||||
class ProductTagSerializer(TagBaseSerializer):
|
class ProductTagSerializer(TagBaseSerializer):
|
||||||
"""Serializer for model Tag."""
|
"""Serializer for model Tag."""
|
||||||
|
|
||||||
category = TagCategoryShortSerializer(read_only=True)
|
category = TagCategoryProductSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta(TagBaseSerializer.Meta):
|
class Meta(TagBaseSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -88,10 +88,10 @@ class ProductBaseSerializer(serializers.ModelSerializer):
|
||||||
name = serializers.CharField(source='display_name', read_only=True)
|
name = serializers.CharField(source='display_name', read_only=True)
|
||||||
product_type = ProductTypeBaseSerializer(read_only=True)
|
product_type = ProductTypeBaseSerializer(read_only=True)
|
||||||
subtypes = ProductSubTypeBaseSerializer(many=True, read_only=True)
|
subtypes = ProductSubTypeBaseSerializer(many=True, read_only=True)
|
||||||
establishment_detail = EstablishmentShortSerializer(source='establishment', read_only=True)
|
establishment_detail = EstablishmentProductShortSerializer(source='establishment', read_only=True)
|
||||||
tags = ProductTagSerializer(source='related_tags', many=True, read_only=True)
|
tags = ProductTagSerializer(source='related_tags', many=True, read_only=True)
|
||||||
wine_region = WineRegionBaseSerializer(read_only=True)
|
wine_region = WineRegionBaseSerializer(read_only=True)
|
||||||
wine_colors = TagBaseSerializer(many=True, read_only=True)
|
wine_colors = ProductTagSerializer(many=True, read_only=True)
|
||||||
preview_image_url = serializers.URLField(source='preview_main_image_url',
|
preview_image_url = serializers.URLField(source='preview_main_image_url',
|
||||||
allow_null=True,
|
allow_null=True,
|
||||||
read_only=True)
|
read_only=True)
|
||||||
|
|
@ -120,6 +120,7 @@ class ProductBaseSerializer(serializers.ModelSerializer):
|
||||||
class ProductDetailSerializer(ProductBaseSerializer):
|
class ProductDetailSerializer(ProductBaseSerializer):
|
||||||
"""Product detail serializer."""
|
"""Product detail serializer."""
|
||||||
description_translated = TranslatedField()
|
description_translated = TranslatedField()
|
||||||
|
establishment_detail = EstablishmentShortSerializer(source='establishment', read_only=True)
|
||||||
review = ReviewShortSerializer(source='last_published_review', read_only=True)
|
review = ReviewShortSerializer(source='last_published_review', read_only=True)
|
||||||
awards = AwardSerializer(many=True, read_only=True)
|
awards = AwardSerializer(many=True, read_only=True)
|
||||||
classifications = ProductClassificationBaseSerializer(many=True, read_only=True)
|
classifications = ProductClassificationBaseSerializer(many=True, read_only=True)
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,10 @@ class ProductListView(ProductBaseView, generics.ListAPIView):
|
||||||
serializer_class = serializers.ProductBaseSerializer
|
serializer_class = serializers.ProductBaseSerializer
|
||||||
filter_class = filters.ProductFilterSet
|
filter_class = filters.ProductFilterSet
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
qs = super().get_queryset().with_extended_related()
|
||||||
|
return qs
|
||||||
|
|
||||||
|
|
||||||
class ProductDetailView(ProductBaseView, generics.RetrieveAPIView):
|
class ProductDetailView(ProductBaseView, generics.RetrieveAPIView):
|
||||||
"""Detail view fro model Product."""
|
"""Detail view fro model Product."""
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,21 @@ class TagBackOfficeSerializer(TagBaseSerializer):
|
||||||
'category'
|
'category'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class TagCategoryProductSerializer(serializers.ModelSerializer):
|
||||||
|
"""SHORT Serializer for TagCategory"""
|
||||||
|
|
||||||
|
label_translated = TranslatedField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
|
||||||
|
model = models.TagCategory
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'label_translated',
|
||||||
|
'index_name',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TagCategoryBaseSerializer(serializers.ModelSerializer):
|
class TagCategoryBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for model TagCategory."""
|
"""Serializer for model TagCategory."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user