Django -- Geopy
I am looking for how to define a distance between two points. The first one is related to the post itself and does not change for each post. It indicates the position of the post. The second would be linked to the user's position.
I want to calculate distance btw Post and User.
ISSUE : Assume I get connected : all distance are listed for each post
I got for one post: [459.414, 459.414, 459.414, 0.605, 0.605, 0.605, 0.605, 0.605, 459.414, 0.605] km
user/models.py
class UserProfile(models.Model):
...
latitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
longitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
post/models.py
class Cuisine(models.Model):
...
latitude_user = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
longitude_user = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
Thanks to @tgrandje I've solved some issue to find value from UserProfile
:
The issue is I always get the same distance for each post.
Any advice?
def Homemainpage(request):
post = Cuisine.objects.filter(status=0).order_by('-publishing_date').all() #All cuisine
if request.user.is_authenticated:
if request.user.userprofile.full_address:
distance = []
for p in post:
post_lon = p.longitude_user
post_lat = p.latitude_user
post_situation = (post_lon, post_lat)
user_lon = UserProfile.objects.filter(user=request.user)[0].longitude
user_lat = UserProfile.objects.filter(user=request.user)[0].latitude
user_situation = (user_lon, user_lat)
distance.append(round(geodesic(post_situation, user_situation).km, 3))
# Pre commande pour demain
#post = Cuisine.objects.filter(status=0).filter(start_date=now().date() + timedelta(days=1)).order_by('-publishing_date').all()
# En commande pour aujourd'hui
#post = Cuisine.objects.filter(status=0).filter(start_date=now().date()).order_by('-publishing_date').all()
paginator = Paginator(post, 3)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
listaliments = ListAliments.objects.filter(status=1).all()
typerepas = Typerepas.objects.filter(status=1).all()
sperepas = Sperepas.objects.filter(status=1).all()
return render(request, 'index.html', {
'post': post,
'listaliments': listaliments,
'typerepas': typerepas,
'sperepas': sperepas,
'page_obj': page_obj,
'today' : now().date(),
'tomorrow': now().date() + timedelta(days=1),
'distance': distance,
})