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:
commit
feb1b8c6ea
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user