from geopy.distance import distance import os from pandas import read_pickle from django.db.models import F, Func path = os.path.dirname(os.path.abspath(__file__)) df = read_pickle(os.path.join(path, 'plz.pkl')) def calculate_distance(zip_1, zip_2): if zip_1 == zip_2: return 0 zip_1_coords = tuple(df[df.index == zip_1].values) zip_2_coords = tuple(df[df.index == zip_2].values) dist = round(distance((zip_1_coords), (zip_2_coords)).kilometers) return None if dist > 400 else dist def filter_by_distance(qs, filter_zipcode, max_dist): filtered_offers = [] for offer in qs: d = calculate_distance(int(offer.zipcode), int(filter_zipcode)) if d is not None and d <= max_dist: filtered_offers.append(offer) return filtered_offers