python - 我无法在 GeoDjango (PostGis) 中按城市距离排序
问题描述
距离方法在 GeoDjango (QuerySet) 中不起作用
我的模型:
class City(models.Model):
name_english = models.CharField(max_length=500, null=True, blank=True)
site = models.ForeignKey(Site, on_delete=models.CASCADE, null=True, blank=True, verbose_name="city", db_index=True, related_name="city_relate")
name_city_avito = models.CharField(max_length=500, null=True, blank=True)
country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True, verbose_name="Country", db_index=True, related_name="Country_relate")
region = models.ForeignKey(Region, on_delete=models.CASCADE, null=True, blank=True, verbose_name="Region", db_index=True, related_name="Region_relate")
point = models.PointField(blank=True, null=True)
视图.py
class Landing_head(View):
def get(self, request):
b = Site.objects.get_current()
current_location = City.objects.get(site__id=b.id).point
cities = City.objects.filter(point__distance_lte=(current_location, D(km=200))).distance(current_location).order_by('point_distance')[:1][0]
for z in cities:
print(z)
输出错误 'QuerySet' 对象没有属性 'distance'
虽然它在这个版本中工作,但没有按距离排序
class Landing_head(View):
def get(self, request):
b = Site.objects.get_current()
current_location = City.objects.get(site__id=b.id).point
cities = City.objects.filter(point__distance_lte=(current_location, D(km=200)))
for z in cities:
print(z)
解决方案
在 Django 版本 >= 1.9.distance
中不存在。
您需要将距离测量注释到查询集,然后按注释字段排序:
cities = City.objects.filter(
point__distance_lte=(current_location, D(km=200))
).annotate(
distance=Distance('point', current_location)
).order_by('distance')
推荐阅读
- javascript - 自定义图形属性/对象一致性
- google-cloud-platform - 未找到请求的项目
- javascript - 在反应路由器中设置baseurl
- tensorflow - 使用经过训练的对象检测 API 模型和 TF 2 进行批量预测
- ruby-on-rails - 覆盖gem的初始化方法?
- javascript - Firebase getDownloadURL 错误“用户取消了上传/下载”
- sql - 在 teradata 过程中创建表会导致 SELECT 错误
- spring-boot - RestBindingMode.auto 出现 Camel 错误
- sql - 列可用时的 Sql 连接,否则与剩余的列连接?
- arrays - 将数组插入到 mongoDB 中的字段中