Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 相关模型的GeoDjango距离_Python_Django_Postgis_Geodjango - Fatal编程技术网

Python 相关模型的GeoDjango距离

Python 相关模型的GeoDjango距离,python,django,postgis,geodjango,Python,Django,Postgis,Geodjango,我试图返回一个查询集,其中包含与相关模型的距离 models.py(简化) 我需要返回的是标签对象,这些对象具有特定的标记/标记,这些标记按与给定点的距离排序 标签可通过以下方式找到: Label.objects.filter(hashtags__in=tags) 距离在使用以下公式计算的存储对象上可用: Store.objects.filter(label__hashtags__in=tags) .distance(location).order_by('dista

我试图返回一个查询集,其中包含与相关模型的距离

models.py(简化)

我需要返回的是标签对象,这些对象具有特定的标记/标记,这些标记按与给定点的距离排序

标签可通过以下方式找到:

Label.objects.filter(hashtags__in=tags)
距离在使用以下公式计算的存储对象上可用:

Store.objects.filter(label__hashtags__in=tags)
             .distance(location).order_by('distance')
我想做的是在
标签
表上执行查询以返回所有内容,但我怀疑这是不可能的

在queryset上尝试
distance
方法会导致:

TypeError: ST_Distance output only available on GeometryFields.

如果做不到这一点,那么做效率最高的次好的事情是有意义的。我能想到的唯一解决方案是执行这两个查询并将结果合并到一个集合中。

完全可以实现您的查询:

  • 使用在每个
    标签上附加距离值
  • 使用该函数计算每个门店的
    地质点
    位置
    点之间的距离
查询应如下所示:

from django.contrib.gis.db.models.functions import Distance

Label.objects.filter(hashtags__in=tags)
             .annotate(distance=Distance('store__geopoint', location))
             .order_by('distance')

在发布一年后偶然发现了这个!您正在进行距离(位置)计算,但您的场似乎是地质点。那么,您的查询不应该是距离(“地理点”)?嘿,@RobinElvin,我在想,您觉得我(很晚)的回答有用吗?@JohnMoutafis对不起,这个项目已经很久没有了,所以我无法对照原始问题测试这个问题。如果有人认为它有效,我会接受你的回答。
from django.contrib.gis.db.models.functions import Distance

Label.objects.filter(hashtags__in=tags)
             .annotate(distance=Distance('store__geopoint', location))
             .order_by('distance')