У меня есть две модели, одна с областями, другая с точками.Я пытаюсь выполнить простой поиск при сохранении точечной модели (отправляет сообщение пользователям, в чьей области появляется точка).
Следующий код находится в обработчике сигнала 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)
[]
Как вы можете видеть, можно извлечь только что созданный экземпляр, а затем найти все PolyBasedModel, в которых появляется этот экземпляр PointBasedModel, отфильтровывая обратно 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
Это не имеет смысла ... Любойбыла похожая проблема / знаете решение?