我想直接过滤 GeoDjango PointField 上的纬度/经度值。
例如
geolocation__lat__lte=40.0
通常在 django 中,我可以像
geolocation.x
或 geolocation.y
一样直接访问纬度/经度,所以我尝试像 geolocation_y__lte=40.0
那样进行过滤。
结果就是FieldError: Unsupported lookup 'y' for PointField or join on the field not permitted.
。
ChatGPT 无法提供帮助,而且我在 stackoverflow 上没有找到相关问题。
将感谢任何帮助。
ST_X
[postgis.net] 和 ST_Y
[postgis.net] 函数,但是这些函数并不是直接在据我所知,Django,但这不是问题:我们可以自己定义这些。
from django.db.models import FloatField
from django.db.models.expressions import Func
class ST_X(Func):
function = 'ST_X'
output_field = FloatField()
class ST_Y(Func):
function = 'ST_Y'
output_field = FloatField()
然后使用:
MyModel.objects.alias(
geolocation_lat=ST_Y('geolocation'), geolocation_long=ST_X('geolocation')
).filter(geolocation_lat__lte=40.0)