Fix wines db queries

This commit is contained in:
Kuroshini 2019-10-16 14:11:07 +03:00
parent 94d20469f6
commit cc67499601
6 changed files with 68 additions and 7 deletions

View File

@ -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."""

View File

@ -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."""

View File

@ -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')

View File

@ -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)

View File

@ -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."""

View File

@ -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."""