是否可以直接使用this GeoHash class而不在db上创建模型?

例如:

from django.contrib.gis.geos import Point
from django.contrib.gis.db.models.functions import GeoHash
p = Point(x=lon, y=lat, srid=4326)
geohash_str = GeoHash(p).???   # i want the actual geohash string here

推荐答案

GeoHash [Django-doc]本身可以计算not任何东西.本质上,它只是一些抽象的语法树 node ,可以转换为SQL表达式.因此,算法在数据库中进行判断,而不是Django.

是否可以直接使用这个GeoHash类而不在数据库上创建模型?

是的,或者至少是金.我们可以进行一个SELECT查询,并确定其中的geohash,比如:

你可以使用另一个与它无关的模型来判断它,其中:

from app_name.models import SomeModel
from django.contrib.gis.db.models.functions import GeoHash
from django.contrib.gis.geos import Point
from django.db import connections

db_name = 'default'

connection = connections[db_name]
compiler = conn.ops.compiler('SQLCompiler')(
    SomeModel.objects.none(), connection, db_name
)

with connection.cursor() as cursor:
    sql, params = GeoHash(Point(x=lon, y=lat, srid=4326)).as_sql(
        compiler, connection
    )
    cursor.execute(f'SELECT {sql};', params)
    result, *__ = cursor.fetchone()

另一个 Select 是重建数据库使用的算法,但不同的数据库可以使用不同的算法,最终可能改变他们的 idea .

Django相关问答推荐

查尔而不是瓦尔查尔加盟Django 球场

Django-Values()并按月分组

如何在Django中显示多个相关对象

通过 B 的外键列表访问模型 B 的行

从一个组中获取所有用户 - Django

如何连接到 docker 容器中的 postgres 数据库?

如何在 django 的列表中查找所有对象作为对象?

Django 模型中的隐藏字段

在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?

在 Django 管理员中嵌套内联?

django类型对象Http404没有属性get

Django 模板列表的第一个元素

Django:访问给定字段的 Select 元组

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

在 Mac OS X 上安装支持 JPEG 的 PIL

Django查询否定

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?

为什么我的 Django 单元测试不知道安装了 MessageMiddleware?

提供来自 django 的压缩内容