mirror of
https://github.com/nikdoof/vapemap.git
synced 2025-12-14 06:42:17 +00:00
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
from django.views.generic import ListView
|
|
from haystack.query import SearchQuerySet
|
|
from haystack.utils.geo import Point, D
|
|
from ..models import Store
|
|
from ..utils import caching_geo_lookup
|
|
|
|
|
|
class DistanceSearchView(ListView):
|
|
|
|
template_name = 'stores/store_search.html'
|
|
distance = 25
|
|
|
|
def get_location(self):
|
|
# TODO: geopy the location based on kwargs
|
|
location = self.request.GET.get('location')
|
|
lat = self.request.GET.get('lat')
|
|
lng = self.request.GET.get('lng')
|
|
if location:
|
|
name, geo = caching_geo_lookup(location)
|
|
elif lat and lng:
|
|
geo = (float(lat), float(lng))
|
|
else:
|
|
geo = None
|
|
self.location_geo = geo
|
|
|
|
return Point(geo[1], geo[0])
|
|
|
|
def get_distance(self):
|
|
return D(km=self.request.GET.get('distance', self.distance))
|
|
|
|
def get_queryset(self):
|
|
location = self.get_location()
|
|
if not location:
|
|
return SearchQuerySet.none
|
|
distance = self.get_distance()
|
|
print location, distance
|
|
return SearchQuerySet().dwithin('location', location, distance)\
|
|
.distance('location', location).order_by('-distance')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
ctx = super(DistanceSearchView, self).get_context_data(**kwargs)
|
|
ctx.update({
|
|
'location': self.request.GET.get('location'),
|
|
'location_geo': self.location_geo,
|
|
})
|
|
return ctx |