Правильный способ написания запроса фильтра на модели geodjango (выяснение, содержит ли поле мультиполигона точку)
Я новичок в geodjango и пытаюсь создать приложение после прохождения учебника. Итак, у меня есть такая модель:
from django.contrib.gis.db import models
class CountryBorder(models.Model):
f_code = models.CharField(max_length=5)
name = models.CharField(max_length=254)
....
....
#the multipolygonfield on which I want to perform lookup
geom = models.MultiPolygonField(srid=4326)
def __str__(self):
return self.name
и я пытаюсь найти экземпляр модели, который содержит (поле model.geom содержит) точку. Я пытался сделать это, как описано в документации:
from app_name.models import CountryBorder
from django.contrib.gis.geos import Point
pnt = Point(23.1827, 75.7682)
CountryBorder.objects.get(geom_contains=pnt)
Но я получаю следующее сообщение об ошибке:
django.core.exceptions.FieldError: Невозможно преобразовать ключевое слово 'geom_contains' в поле. Варианты: f_code, geom, name.....
.
Я что-то упустил?
Вы разделяете имя поля (здесь geom
) и поиск (здесь __contains
[Django-doc]) двумя последовательными подчеркиваниями (__
), а не одним подчеркиванием, так:
from app_name.models import CountryBorder
from django.contrib.gis.geos import Point
pnt = Point(23.1827, 75.7682)
CountryBorder.objects.get(geom__contains=pnt)