From f21b4005aa15e5b51cbb03d3f758f8854aebdaf4 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 26 Sep 2019 16:39:30 +0300 Subject: [PATCH] address coordinates in get api queries --- apps/location/models.py | 4 ++++ apps/location/serializers/common.py | 20 ++++++++++---------- apps/search_indexes/serializers.py | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/location/models.py b/apps/location/models.py index 7084385f..b0aa298c 100644 --- a/apps/location/models.py +++ b/apps/location/models.py @@ -104,6 +104,10 @@ class Address(models.Model): def longitude(self): return self.coordinates.x + @property + def location(self): + return self.location_field_indexing + @property def location_field_indexing(self): return {'lat': self.latitude, diff --git a/apps/location/serializers/common.py b/apps/location/serializers/common.py index 555cf499..0b8ac7ed 100644 --- a/apps/location/serializers/common.py +++ b/apps/location/serializers/common.py @@ -90,8 +90,9 @@ class AddressSerializer(serializers.ModelSerializer): source='city', queryset=models.City.objects.all()) city = CitySerializer(read_only=True) - geo_lon = serializers.FloatField(allow_null=True) - geo_lat = serializers.FloatField(allow_null=True) + geo_lon = serializers.FloatField(allow_null=True, write_only=True) + geo_lat = serializers.FloatField(allow_null=True, write_only=True) + location = serializers.ReadOnlyField() class Meta: model = models.Address @@ -104,7 +105,8 @@ class AddressSerializer(serializers.ModelSerializer): 'number', 'postal_code', 'geo_lon', - 'geo_lat' + 'geo_lat', + 'location', ] def validate(self, attrs): @@ -119,12 +121,10 @@ class AddressSerializer(serializers.ModelSerializer): def to_representation(self, instance): """Override to_representation method""" - if instance.coordinates and isinstance(instance.coordinates, Point): - # Point(longitude, latitude) - setattr(instance, 'geo_lat', instance.coordinates.x) - setattr(instance, 'geo_lon', instance.coordinates.y) - else: - setattr(instance, 'geo_lat', float(0)) - setattr(instance, 'geo_lon', float(0)) + if not instance.coordinates or not isinstance(instance.coordinates, Point): + setattr(instance, 'location', { + 'lat': float(0), + 'lon': float(0), + }) return super().to_representation(instance) diff --git a/apps/search_indexes/serializers.py b/apps/search_indexes/serializers.py index 480f509d..a2ff8d53 100644 --- a/apps/search_indexes/serializers.py +++ b/apps/search_indexes/serializers.py @@ -53,7 +53,7 @@ class EstablishmentDocumentSerializer(DocumentSerializer): fields = ( 'id', 'name', - 'description', + # 'description', 'public_mark', 'toque_number', 'price_level',