From 521d7f19f3f95c571867371375f7a6a4c4437910 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Wed, 16 Oct 2019 14:11:07 +0300 Subject: [PATCH] Add city name field to establishment api representations --- apps/establishment/serializers/common.py | 14 +++++++++++++- apps/establishment/views/web.py | 2 +- apps/search_indexes/documents/establishment.py | 1 - apps/search_indexes/serializers.py | 9 +++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 268ffc82..23a21ad4 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -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 +from location.serializers import AddressBaseSerializer, CitySerializer, AddressDetailSerializer from main.serializers import AwardSerializer, CurrencySerializer from tag.serializers import TagBaseSerializer from timetable.serialziers import ScheduleRUDSerializer @@ -225,6 +225,16 @@ class EstablishmentBaseSerializer(ProjectModelSerializer): 'currency' ] +class EstablishmentAddressExtendedSerializer(EstablishmentBaseSerializer): + """Establishment with city serializer.""" + + address = AddressDetailSerializer() + + class Meta(EstablishmentBaseSerializer.Meta): + """Meta class.""" + + fields = EstablishmentBaseSerializer.Meta.fields + class EstablishmentGeoSerializer(EstablishmentBaseSerializer): """Serializer for Geo view.""" @@ -260,6 +270,8 @@ class EstablishmentDetailSerializer(EstablishmentBaseSerializer): review = ReviewShortSerializer(source='last_published_review', allow_null=True) employees = EstablishmentEmployeeSerializer(source='actual_establishment_employees', many=True) + address = AddressDetailSerializer(read_only=True) + 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) diff --git a/apps/establishment/views/web.py b/apps/establishment/views/web.py index 8391315c..d11502f4 100644 --- a/apps/establishment/views/web.py +++ b/apps/establishment/views/web.py @@ -32,7 +32,7 @@ class EstablishmentListView(EstablishmentMixinView, generics.ListAPIView): """Resource for getting a list of establishments.""" filter_class = filters.EstablishmentFilter - serializer_class = serializers.EstablishmentBaseSerializer + serializer_class = serializers.EstablishmentAddressExtendedSerializer class EstablishmentRetrieveView(EstablishmentMixinView, generics.RetrieveAPIView): diff --git a/apps/search_indexes/documents/establishment.py b/apps/search_indexes/documents/establishment.py index 19d419aa..fabfe88d 100644 --- a/apps/search_indexes/documents/establishment.py +++ b/apps/search_indexes/documents/establishment.py @@ -65,7 +65,6 @@ class EstablishmentDocument(Document): 'number': fields.IntegerField(), 'postal_code': fields.KeywordField(), 'coordinates': fields.GeoPointField(attr='location_field_indexing'), - # todo: remove if not used 'city': fields.ObjectField( properties={ 'id': fields.IntegerField(), diff --git a/apps/search_indexes/serializers.py b/apps/search_indexes/serializers.py index bbc61735..71f92caa 100644 --- a/apps/search_indexes/serializers.py +++ b/apps/search_indexes/serializers.py @@ -19,10 +19,19 @@ class TagsDocumentSerializer(serializers.Serializer): return get_translated_value(obj.label) +class CityDocumentShortSerializer(serializers.Serializer): + """City serializer for ES Document,""" + + id = serializers.IntegerField() + code = serializers.CharField(allow_null=True) + name = serializers.CharField() + + class AddressDocumentSerializer(serializers.Serializer): """Address serializer for ES Document.""" id = serializers.IntegerField() + city = CityDocumentShortSerializer() street_name_1 = serializers.CharField() street_name_2 = serializers.CharField() number = serializers.IntegerField()