Python 具有距离查找功能的Geodjango查询
我想根据geodjango查询中计算的距离对结果进行排序。Python 具有距离查找功能的Geodjango查询,python,geodjango,Python,Geodjango,我想根据geodjango查询中计算的距离对结果进行排序。 我尝试了两种方法,但都有错误 models.py class Partner(models.Model): name = models.CharField(max_length=255) address = models.CharField(max_length=255) location = models.PointField(u"longitude/latitude",geography=True, blank=True, n
我尝试了两种方法,但都有错误 models.py
class Partner(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
location = models.PointField(u"longitude/latitude",geography=True, blank=True, null=True)
views.py
方法1:
testing = Partner.objects.filter(location__distance_lte=(pnt, D(km=40))).annotate(distance=Distance('location', pnt)).order_by('distance')
print(testing)
testing = Partner.objects.filter(location__distance_lte=(pnt, D(km=40))).annotate(distance=Distance('location', pnt)).order_by('distance')
print(testing)
错误:
Internal Server Error: /partner/filter/
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/prasanna/Projects/partner_server/partner/views.py", line 79, in Filter_function
print(testing.annotate(distance=Distance('location', pnt)).order_by('distance'))
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Internal Server Error: /partner/filter/
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/prasanna/Projects/partner_server/partner/views.py", line 79, in Filter_function
print(testing.distance(pnt).order_by('distance'))
AttributeError: 'QuerySet' object has no attribute 'distance'
方法2:
testing = Partner.objects.filter(location__distance_lte=(pnt, D(km=40))).annotate(distance=Distance('location', pnt)).order_by('distance')
print(testing)
testing = Partner.objects.filter(location__distance_lte=(pnt, D(km=40))).annotate(distance=Distance('location', pnt)).order_by('distance')
print(testing)
错误:
Internal Server Error: /partner/filter/
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/prasanna/Projects/partner_server/partner/views.py", line 79, in Filter_function
print(testing.annotate(distance=Distance('location', pnt)).order_by('distance'))
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Internal Server Error: /partner/filter/
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/prasanna/Projects/partner_server/partner/views.py", line 79, in Filter_function
print(testing.distance(pnt).order_by('distance'))
AttributeError: 'QuerySet' object has no attribute 'distance'
您的查询是正确的,但我认为您遗漏了什么,或者您混合了两种类型的距离,并且第一种用法与第二种用法不同 这是一个测量对象 1-
来自django.contrib.gis.measure导入距离
这是一个地理数据库功能
2-来自django.contrib.gis.db.models.functions导入距离
第二个函数将以注释函数理解的比较方式迭代每个对象(db中的行),但是第一个函数只是一个基本的度量函数,不能迭代或作为比较函数
您可以参考django文档,了解其中的区别
测量:
数据库功能: