GeoDjango с ошибками при использовании django.contrib.gis.measure.D
Прежде всего: Python 2.7.6, Django 1.6.5, Postgres 9.3.4, PostGIS 2.1.3, psycopg2 2.5.3 на RHEL 6.5
Вот соответствующая модель:
class Location(models.Model):
name = models.CharField(max_length=255)
geometry = models.MultiPolygonField(blank=True, default=None, null=True)
objects = models.GeoManager() # override the default manager with a GeoManager instance
parent = models.ForeignKey('self', blank=True, default=None, null=True)
def __unicode__(self):
return self.name
Этот запрос должен работатьв соответствии с документами:
touching_locations = Location.objects.filter(geometry__dwithin=(location.geometry, D(km=5)))
logging.debug(type(touching_locations))
logging.debug(len(touching_locations))
Но это не так. Первый вызов отладки работает, но второй бросаетValueError
:
<class 'django.contrib.gis.db.models.query.GeoQuerySet'>
ValueError: Only numeric values of degree units are allowed on geographic DWithin queries.
Если я сделаю небольшое изменение, изменивD(km=5)
в5
:
touching_locations = Location.objects.filter(geometry__dwithin=(location.geometry, 5))
logging.debug(type(touching_locations))
logging.debug(len(touching_locations))
Внезапно это работает. Вывод, который я получаю это:
<class 'django.contrib.gis.db.models.query.GeoQuerySet'>
54
Кто-нибудь знает, почему это не работает, как ожидалось? Возможно, это ошибка, или я делаю ошибку, которую просто не вижу?
[редактировать]
Я думаю, что это может быть ошибка Django. Я пошел вперед и открыл билетВот, Как только я выясню, что такое правильное решение, я добавлю ответ здесь.