From cb346b59c79486073146acd78a5e92e690b28c24 Mon Sep 17 00:00:00 2001 From: Jannis Portmann Date: Sat, 23 Sep 2023 14:05:43 +0200 Subject: [PATCH 1/2] Fix alignment issue --- pflaenzli/pflaenzli/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pflaenzli/pflaenzli/templates/base.html b/pflaenzli/pflaenzli/templates/base.html index 286d262..1e1f6a3 100644 --- a/pflaenzli/pflaenzli/templates/base.html +++ b/pflaenzli/pflaenzli/templates/base.html @@ -140,7 +140,7 @@
-
+
{% if request.user.is_authenticated %}
{% csrf_token %} - +
{% endif %} diff --git a/pflaenzli/pflaenzli/templatetags/plz.py b/pflaenzli/pflaenzli/templatetags/plz.py new file mode 100644 index 0000000..f971ab1 --- /dev/null +++ b/pflaenzli/pflaenzli/templatetags/plz.py @@ -0,0 +1,14 @@ +from django import template +from pflaenzli.models import Plz + +register = template.Library() + + +@register.filter +def get_plz(offer): + try: + return Plz.objects.get(plz=offer.zipcode) + except Plz.MultipleObjectsReturned: + return Plz.objects.filter(plz=offer.zipcode).first() + except Plz.DoesNotExist: + return None diff --git a/pflaenzli/pflaenzli/utils/distance.py b/pflaenzli/pflaenzli/utils/distance.py index 403f00e..19c3866 100644 --- a/pflaenzli/pflaenzli/utils/distance.py +++ b/pflaenzli/pflaenzli/utils/distance.py @@ -2,28 +2,34 @@ from geopy.distance import distance import os from pandas import read_pickle from django.db.models import F, Func +from pflaenzli.models import Plz 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: +def calculate_distance(plz_1: Plz, plz_2: Plz): + if plz_1 == plz_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) + dist = round(distance((plz_1.lat, plz_1.lon), (plz_2.lat, plz_2.lon)).kilometers) return None if dist > 400 else dist def filter_by_distance(qs, filter_zipcode, max_dist): filtered_offers = [] + + try: + filter_plz = Plz.objects.get(plz=filter_zipcode) + except Plz.DoesNotExist: + return filtered_offers + for offer in qs: - d = calculate_distance(int(offer.zipcode), int(filter_zipcode)) + offer_plz = Plz.objects.get(plz=offer.zipcode) + + d = calculate_distance(offer_plz, filter_plz) if d is not None and d <= max_dist: filtered_offers.append(offer) return filtered_offers diff --git a/pflaenzli/pflaenzli/views.py b/pflaenzli/pflaenzli/views.py index cb0ce9e..beb492c 100644 --- a/pflaenzli/pflaenzli/views.py +++ b/pflaenzli/pflaenzli/views.py @@ -12,7 +12,7 @@ from django.views.decorators.http import require_POST from .forms import CreateOfferForm, FilterForm, RegistrationForm, WishForm from .mail import send_offer_email -from .models import Offer, PflaenzliUser, Wish +from .models import Offer, PflaenzliUser, Wish, Plz from .upload import generate_unique_filename from .utils.compress_image import compress_image from .utils.distance import calculate_distance, filter_by_distance @@ -59,7 +59,7 @@ def offer_detail(request, offer_id): if offer.zipcode == request.user.zipcode: dist = 0 else: - dist = calculate_distance(offer.zipcode, request.user.zipcode) + dist = calculate_distance(Plz.objects.get(plz=offer.zipcode), Plz.objects.get(plz=request.user.zipcode)) else: dist = None else: