django 点定义

0 投票
1 回答
3378 浏览
提问于 2025-04-16 13:49

我的模型:

class Mod(models.model)
    name = models.CharField(max_length = 255)
    co_x = models.DecimalField(max_digits = 11, decimal_places = 8)
    co_y = models.DecimalField(max_digits = 11, decimal_places = 8)

我的视图:

def closedPoint(request):
    location_name = str(request.POST.get("lo", default=""))
    nokta_x = int(float(request.POST.get("x"))
    nokta_y = int(float(request.POST.get("y"))
    poi = Point(nokta_x, nokta_y, srid = 900913)

    sk = Mod()
    poi_s = Point(sk.co_x, co_y, srid = 900913)

    resut_poi = Mod.objects.filter(poi_s__distance_lte = (poi, D(km = 7))).filter(name__in = location_name)

在这里,我想要计算7公里内最近的点,但它给了我一个错误提示:“点初始化时给定的参数无效”。

1 个回答

1

好的,现在很明显,你的错误信息是因为用 None 初始化了一个 Point 类。

这就是你第一个关键问题。

根据错误信息,我猜 poi_s 是用 None, None 初始化的,因为 Mod() 是一个没有保存的实例,没有任何值,这些都是无效的参数。

sk = Mod() # unsaved Mod instance with no defaults
poi_s = Point(sk.co_x, co_y, srid = 900913)
# sk.co_x is None

你在解决了上面的问题后,会遇到第二个问题,那就是用无效的查找类型查询模型(这和 PointField 相关,具体是 __distance),它需要一个元组。至于怎么解决这个问题,我就不知道了。

你需要看看 GeoDjango 是怎么把这个元组转换成数据库查询的。

撰写回答