gpt4 book ai didi

Django:按距离排序对象

转载 作者:行者123 更新时间:2023-12-05 07:26:19 50 4
gpt4 key购买 nike

我有这个模型

class Company(models.Model):
name = models.CharField(max_length = 50)
description = models.TextField()
latitude = models.FloatField()
longitude = models.FloatField()
owner = models.ForeignKey(User, on_delete = models.CASCADE, related_name = "company_owner")
category = models.ForeignKey(Category, on_delete = models.CASCADE)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "Companies"

def get_absolute_url(self):
return reverse('category_list')
#if want to redirect to its detail page then
# return reverse('company_detail' ,kwargs = {'pk' : self.pk})

def get_distance(self):
ip = get('https://api.ipify.org').text
reader = geoip2.database.Reader('categories/GeoLite2-City.mmdb')
response = reader.city(ip)
current_lat = response.location.latitude
current_lon = response.location.longitude
comp_lat = self.latitude
comp_lon = self.longitude
R = 6373.0

lat1 = radians(current_lat)
lon1 = radians(current_lon)
lat2 = radians(comp_lat)
lon2 = radians(comp_lon)

dlon = lon2 - lon1
dlat = lat2 - lat1

a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))

distance = R * c
return(distance)

我从 get_distance() 函数得到了用户位置和公司位置之间的距离。但是如何按升序对距离进行排序?由于距离与用户的不同位置不同,我无法将距离存储在数据库中。我想打印按距离升序排列的对象

最佳答案

最好的解决方案是研究使用 GeoDjango,它使您能够执行 spatial queries .

除此之外,您还可以做一些其他事情 distance lookups这主要是你要找的东西。然后使用适当的数据库扩展(例如 PostGIS 用于 postgres),所有查询功能都驻留在数据库中。如果您不能使用 GeoDjango,请考虑执行原始 SQL 查询,例如参见 this question .

关于Django:按距离排序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421285/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com