【问题标题】:How to transfer GeoQuerySet.distance(geom, **kwargs) from Django 1.8 to Django 3.0?如何将 GeoQuerySet.distance(geom, **kwargs) 从 Django 1.8 转移到 Django 3.0?
【发布时间】:2020-04-02 21:32:23
【问题描述】:

我在 Django 1.8 文档中找到了这个示例。对我来说,遵循相同的步骤非常重要,但在 Django 3.0(或 2.2)中。

class AustraliaCity(NamedModel):
    point = models.PointField()
    radius = models.IntegerField(default=10000)
    allowed_distance = models.FloatField(default=0.5)
pnt = AustraliaCity.objects.get(name='Hobart').point
for city in AustraliaCity.objects.distance(pnt): print(city.name, city.distance)

但是 AustraliaCity.objects.distance(pnt) 在 Django 3.0 中会导致错误。 AttributeError: 'AustraliaCity' 对象没有属性 'distance'。

Traceback (most recent call last):
  File "/home/PycharmProjects/my_project/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/PycharmProjects/my_project/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/PycharmProjects/my_project/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/PycharmProjects/my_project/my_project/web.py", line 21, in show
    print(city.name, city.distance)
AttributeError: 'AustraliaCity' object has no attribute 'distance'

如果有任何建议,我将不胜感激。

【问题讨论】:

  • 是查询错误还是打印错误?
  • @IainShelvington 查询和打印错误
  • 你能分享回溯吗?
  • @IainShelvington 更新了一个问题

标签: django geodjango django-1.8 django-2.2 django-3.0


【解决方案1】:

你应该可以通过注释来做到这一点

from django.contrib.gis.db.models.functions import Distance
for city in AustraliaCity.objects.annotate(distance=Distance('point', pnt)):
    print(city.name, city.distance)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 2015-12-24
    • 2019-06-02
    • 1970-01-01
    • 2020-05-17
    • 2015-09-08
    • 2019-02-01
    • 2015-06-09
    相关资源
    最近更新 更多