我有两个模型,一个有区域,一个有点。我试图在保存点模型时进行一些简单的查找(将消息发送给出现在该区域的用户)。GeoDjango的内部和包含查询集过滤器不同于直接GEOS查找
以下代码来自post_save信号处理程序。
(Pdb) PointBasedModel.objects.filter(location=instance.location)
[<PointBasedModel: on 2011-12-03 16:05:52>, <PointBasedModel: on 2011-12-03 16:05:52>]
(Pdb) PointBasedModel.objects.filter(location__within=PolyBasedModel.objects.all()[0].area)
[<PointBasedModel: on 2012-01-03 17:36:51>, <PointBasedModel: on 2011-12-03 16:05:52>, <PointBasedModel: on 2011-12-03 16:05:52>, <PointBasedModel: on 2011-11-09 19:53:34>, <PointBasedModel: on 2011-11-09 19:53:34>, <PointBasedModel: on 2011-11-06 15:24:31>, <PointBasedModel: on 2011-10-17 07:40:39>, <PointBasedModel: on 2011-02-27 20:46:04>]
(Pdb) PolyBasedModel.objects.filter(area__contains=PointBasedModel.objects.filter(location__within=PolyBasedModel.objects.all()[0].area)[0].location)
[]
正如你所看到的,它可以检索我刚才创建的实例,然后找到所有在出现PointBasedModel实例PolyBasedModels,过滤PolyBasedModel背部使用被称为是内PointBasedModel保利,失败。
的代码是有点做作来演示该问题,但简单地说,这是我所看到的:
(pdb) PolyBasedModel.objects.filter(area__contains=instance.location)
[]
(pdb) instance.location.within(PolyBasedModel.objects.get(pk=2).area)
True
(Pdb) PolyBasedModel.objects.get(pk=2).area.contains(instance.location)
True
这是没有意义......任何人都遇到过类似问题/知道解决办法?