Merge branch 'feature/bring-back-address' into 'develop'

Add city name field to establishment api representations

See merge request gm/gm-backend!118
This commit is contained in:
d.kuzmenko 2019-11-12 12:57:05 +00:00
commit feb1b8c6ea
5 changed files with 43 additions and 3 deletions

View File

@ -111,6 +111,19 @@ class EstablishmentQuerySet(models.QuerySet):
return self.select_related('address', 'establishment_type').\ return self.select_related('address', 'establishment_type').\
prefetch_related('tags') prefetch_related('tags')
def with_schedule(self):
"""Return qs with related schedule."""
return self.prefetch_related('schedule')
def with_currency_related(self):
"""Return qs with related """
return self.prefetch_related('currency')
def with_extended_address_related(self):
"""Return qs with deeply related address models."""
return self.select_related('address__city', 'address__city__region', 'address__city__region__country',
'address__city__country')
def with_extended_related(self): def with_extended_related(self):
return self.select_related('establishment_type').\ return self.select_related('establishment_type').\
prefetch_related('establishment_subtypes', 'awards', 'schedule', prefetch_related('establishment_subtypes', 'awards', 'schedule',

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 from location.serializers import AddressBaseSerializer, CitySerializer, AddressDetailSerializer
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
@ -225,6 +225,19 @@ class EstablishmentBaseSerializer(ProjectModelSerializer):
'currency' 'currency'
] ]
class EstablishmentListRetrieveSerializer(EstablishmentBaseSerializer):
"""Establishment with city serializer."""
address = AddressDetailSerializer()
schedule = ScheduleRUDSerializer(many=True, allow_null=True)
class Meta(EstablishmentBaseSerializer.Meta):
"""Meta class."""
fields = EstablishmentBaseSerializer.Meta.fields + [
'schedule',
]
class EstablishmentGeoSerializer(EstablishmentBaseSerializer): class EstablishmentGeoSerializer(EstablishmentBaseSerializer):
"""Serializer for Geo view.""" """Serializer for Geo view."""
@ -260,6 +273,8 @@ class EstablishmentDetailSerializer(EstablishmentBaseSerializer):
review = ReviewShortSerializer(source='last_published_review', allow_null=True) review = ReviewShortSerializer(source='last_published_review', allow_null=True)
employees = EstablishmentEmployeeSerializer(source='actual_establishment_employees', employees = EstablishmentEmployeeSerializer(source='actual_establishment_employees',
many=True) many=True)
address = AddressDetailSerializer(read_only=True)
menu = MenuSerializers(source='menu_set', many=True, 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_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) best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True)

View File

@ -32,7 +32,11 @@ class EstablishmentListView(EstablishmentMixinView, generics.ListAPIView):
"""Resource for getting a list of establishments.""" """Resource for getting a list of establishments."""
filter_class = filters.EstablishmentFilter filter_class = filters.EstablishmentFilter
serializer_class = serializers.EstablishmentBaseSerializer serializer_class = serializers.EstablishmentListRetrieveSerializer
def get_queryset(self):
return super().get_queryset().with_schedule()\
.with_extended_address_related().with_currency_related()
class EstablishmentRetrieveView(EstablishmentMixinView, generics.RetrieveAPIView): class EstablishmentRetrieveView(EstablishmentMixinView, generics.RetrieveAPIView):

View File

@ -68,7 +68,6 @@ class EstablishmentDocument(Document):
'number': fields.IntegerField(), 'number': fields.IntegerField(),
'postal_code': fields.KeywordField(), 'postal_code': fields.KeywordField(),
'coordinates': fields.GeoPointField(attr='location_field_indexing'), 'coordinates': fields.GeoPointField(attr='location_field_indexing'),
# todo: remove if not used
'city': fields.ObjectField( 'city': fields.ObjectField(
properties={ properties={
'id': fields.IntegerField(), 'id': fields.IntegerField(),

View File

@ -19,10 +19,19 @@ class TagsDocumentSerializer(serializers.Serializer):
return get_translated_value(obj.label) 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): class AddressDocumentSerializer(serializers.Serializer):
"""Address serializer for ES Document.""" """Address serializer for ES Document."""
id = serializers.IntegerField() id = serializers.IntegerField()
city = CityDocumentShortSerializer()
street_name_1 = serializers.CharField() street_name_1 = serializers.CharField()
street_name_2 = serializers.CharField() street_name_2 = serializers.CharField()
number = serializers.IntegerField() number = serializers.IntegerField()