【发布时间】:2020-10-27 14:45:08
【问题描述】:
Django -- Geopy
我正在寻找如何定义两点之间的距离。第一个与帖子本身有关,不会因每个帖子而改变。它表示帖子的位置。第二个将链接到用户的位置。
我想计算 Post 和 User 的距离。
问题:假设我已连接:每个帖子都列出了所有距离
我得到了一篇文章: [459.414, 459.414, 459.414, 0.605, 0.605, 0.605, 0.605, 0.605, 459.414, 0.605] 公里
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')
感谢@tgrandje,我解决了一些从UserProfile 中寻找价值的问题:
问题是我总是为每个帖子获得相同的距离。
有什么建议吗?
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,
})
【问题讨论】:
-
谁能帮帮我?
-
您能发布您的视图的完整代码吗?如果您记录计算出的距离值,您可以在日志/控制台中看到它吗?
-
嗨@D Malan,这就是我对此的全部看法。我在视图的头部添加了测地线。如果我想计算帖子和帖子用户的距离,则代码在 post/models.py 中工作。结果 = 0,因为本地化后 = 用户本地化。我的主要问题是我想根据 self.request.user 显示结果。如果用户A正在登录,距离需要考虑他的位置。
-
如果您希望我发布其他内容,我很乐意这样做:)
-
为什么模型会有self.request?
标签: python django distance geopy