fixed establishment filter by geo
This commit is contained in:
parent
07d17d5bf1
commit
20766768d8
|
|
@ -219,10 +219,8 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
:return: all establishments within the specified radius of specified point
|
||||
:param unit: length unit e.g. m, km. Default is 'm'.
|
||||
"""
|
||||
|
||||
from django.contrib.gis.measure import Distance
|
||||
kwargs = {unit: radius}
|
||||
return self.filter(address__coordinates__distance_lte=(center, Distance(**kwargs)))
|
||||
return self.filter(address__coordinates__distance_lte=(center, DistanceMeasure(**kwargs)))
|
||||
|
||||
|
||||
class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
"""Establishment app views."""
|
||||
|
||||
from django.contrib.gis.geos import Point
|
||||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework import generics, permissions
|
||||
|
||||
|
|
@ -104,23 +105,25 @@ class EstablishmentFavoritesCreateDestroyView(generics.CreateAPIView, generics.D
|
|||
return obj
|
||||
|
||||
|
||||
class EstablishmentNearestRetrieveView(EstablishmentMixin, generics.ListAPIView):
|
||||
class EstablishmentNearestRetrieveView(EstablishmentListView, generics.ListAPIView):
|
||||
"""Resource for getting list of nearest establishments."""
|
||||
serializer_class = serializers.EstablishmentListSerializer
|
||||
filter_class = filters.EstablishmentFilter
|
||||
|
||||
def get_queryset(self):
|
||||
"""Overrided method 'get_queryset'."""
|
||||
from django.contrib.gis.geos import Point
|
||||
"""Overridden method 'get_queryset'."""
|
||||
lat = self.request.query_params.get('lat')
|
||||
lon = self.request.query_params.get('lon')
|
||||
radius = self.request.query_params.get('radius')
|
||||
unit = self.request.query_params.get('unit')
|
||||
|
||||
center = Point(float(self.request.query_params["lat"]), float(self.request.query_params["lon"]))
|
||||
radius = float(self.request.query_params["radius"])
|
||||
unit = self.request.query_params.get("unit", None)
|
||||
by_distance_from_point_kwargs = {"center": center, "radius": radius, "unit": unit}
|
||||
return super(EstablishmentNearestRetrieveView, self).get_queryset() \
|
||||
.by_distance_from_point(**{k: v for k, v in by_distance_from_point_kwargs.items() if v is not None}) \
|
||||
.by_country_code(code=self.request.country_code) \
|
||||
.annotate_in_favorites(user=self.request.user)
|
||||
qs = super(EstablishmentNearestRetrieveView, self).get_queryset()
|
||||
if lat and lon and radius and unit:
|
||||
center = Point(float(lat), float(lon))
|
||||
filter_kwargs = {'center': center, 'radius': float(radius), 'unit': unit}
|
||||
return qs.by_distance_from_point(**{k: v for k, v in filter_kwargs.items()
|
||||
if v is not None})
|
||||
return qs
|
||||
|
||||
|
||||
class EstablishmentTagListView(generics.ListAPIView):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user