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.serializers import common as comment_serializers
|
||||
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 tag.serializers import TagBaseSerializer
|
||||
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):
|
||||
"""Serializer for displaying info about an establishment on product page."""
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,20 @@ class RegionSerializer(serializers.ModelSerializer):
|
|||
'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):
|
||||
"""City serializer."""
|
||||
|
|
|
|||
|
|
@ -82,7 +82,12 @@ class ProductQuerySet(models.QuerySet):
|
|||
def with_extended_related(self):
|
||||
"""Returns qs with almost all related objects."""
|
||||
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') \
|
||||
.select_related('wine_region', 'wine_sub_region')
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from rest_framework import serializers
|
|||
|
||||
from comment.models import Comment
|
||||
from comment.serializers import CommentSerializer
|
||||
from establishment.serializers import EstablishmentShortSerializer, EstablishmentProductSerializer
|
||||
from establishment.serializers import EstablishmentShortSerializer, EstablishmentProductSerializer, EstablishmentProductShortSerializer
|
||||
from gallery.models import Image
|
||||
from product import models
|
||||
from review.serializers import ReviewShortSerializer
|
||||
|
|
@ -12,13 +12,13 @@ from utils import exceptions as utils_exceptions
|
|||
from utils.serializers import TranslatedField, FavoritesCreateSerializer
|
||||
from main.serializers import AwardSerializer
|
||||
from location.serializers import WineRegionBaseSerializer, WineSubRegionBaseSerializer
|
||||
from tag.serializers import TagBaseSerializer, TagCategoryShortSerializer
|
||||
from tag.serializers import TagBaseSerializer, TagCategoryProductSerializer
|
||||
|
||||
|
||||
class ProductTagSerializer(TagBaseSerializer):
|
||||
"""Serializer for model Tag."""
|
||||
|
||||
category = TagCategoryShortSerializer(read_only=True)
|
||||
category = TagCategoryProductSerializer(read_only=True)
|
||||
|
||||
class Meta(TagBaseSerializer.Meta):
|
||||
"""Meta class."""
|
||||
|
|
@ -88,10 +88,10 @@ class ProductBaseSerializer(serializers.ModelSerializer):
|
|||
name = serializers.CharField(source='display_name', read_only=True)
|
||||
product_type = ProductTypeBaseSerializer(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)
|
||||
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',
|
||||
allow_null=True,
|
||||
read_only=True)
|
||||
|
|
@ -120,6 +120,7 @@ class ProductBaseSerializer(serializers.ModelSerializer):
|
|||
class ProductDetailSerializer(ProductBaseSerializer):
|
||||
"""Product detail serializer."""
|
||||
description_translated = TranslatedField()
|
||||
establishment_detail = EstablishmentShortSerializer(source='establishment', read_only=True)
|
||||
review = ReviewShortSerializer(source='last_published_review', read_only=True)
|
||||
awards = AwardSerializer(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
|
||||
filter_class = filters.ProductFilterSet
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().with_extended_related()
|
||||
return qs
|
||||
|
||||
|
||||
class ProductDetailView(ProductBaseView, generics.RetrieveAPIView):
|
||||
"""Detail view fro model Product."""
|
||||
|
|
|
|||
|
|
@ -37,6 +37,21 @@ class TagBackOfficeSerializer(TagBaseSerializer):
|
|||
'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):
|
||||
"""Serializer for model TagCategory."""
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user