get radius ubications
This commit is contained in:
@@ -7,6 +7,7 @@ from django.db.models import Q
|
||||
from django.core import serializers
|
||||
from django.core.validators import validate_email
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.gis.geos import Point
|
||||
from django.template.loader import render_to_string
|
||||
from django.core.mail import EmailMessage
|
||||
from django.db.models import Max, Min
|
||||
@@ -176,8 +177,10 @@ def product_search(request):
|
||||
price_min = request.GET.get('price_min', None)
|
||||
price_max = request.GET.get('price_max', None)
|
||||
order = request.GET.get('order', '')
|
||||
latitude = request.GET.get('latitude', None)
|
||||
longitude = request.GET.get('longitude', None)
|
||||
|
||||
try:
|
||||
# try:
|
||||
# we collect our results here
|
||||
result_set = set()
|
||||
# values for response
|
||||
@@ -225,6 +228,17 @@ def product_search(request):
|
||||
# only intances without shpping costs
|
||||
products_qs = products_qs.filter(Q(discount=None)|Q(discount=0.00))
|
||||
|
||||
if latitude is not None and longitude is not None:
|
||||
coordinates = (float(longitude), float(latitude))
|
||||
# (n km / 40,000 km * 360 degrees) = radius length degrees
|
||||
# Radiuses: 10km, 50km, 200km
|
||||
radiuses = [0.09, 0.45, 1.8]
|
||||
for radius in reversed(radiuses):
|
||||
products_geo_filtered = products_qs.filter(company__geo__dwithin=(Point(coordinates), radius))
|
||||
if len(products_geo_filtered) >= 10:
|
||||
products_qs = products_geo_filtered
|
||||
|
||||
|
||||
# filter by price
|
||||
if price_min is not None:
|
||||
products_qs = products_qs.filter(price__gte=price_min)
|
||||
@@ -277,8 +291,8 @@ def product_search(request):
|
||||
limit = int(limit)
|
||||
result_list = result_list[:limit]
|
||||
return Response(data={"filters": filters, "count": total_results, "products": result_list, 'prices': prices})
|
||||
except Exception as e:
|
||||
return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
# except Exception as e:
|
||||
# return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class CategoryTagAutocomplete(autocomplete.Select2QuerySetView):
|
||||
|
||||
Reference in New Issue
Block a user