Правильный способ написания запроса фильтра на модели 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)
Вернуться на верх