DRF ListView с GeometryFilter

Я пишу API, который должен возвращать все объекты, геометрия которых пересекает данную геометрию (формат EWKT или WKT, который будет определен). Я пытаюсь использовать django-rest-framework-gis.filters но не работает до сих пор.

Что я пробовал:

models.py:

class GeoData(models.Model):
    geometry = models.GeometryField(srid=3857)
    slug_name = models.CharField(max_length=255)

serializers.py:

from .models import GeoData

class GeoDataSerializer(serializers.ModelSerializer):
    class Meta:
        model = GeoData

views.py:

from rest_framework import filters

from .serializers import GeoDataSerializer
from .filters import IntersectionFilter
from .models import GeoData

class GeoDataView(generics.ListAPIView):     
    serializer_class = GeoDataSerializer
    filter_backends = (filters.DjangoFilterBackend, ) 
    filter_class = IntersectionFilter

    def get_queryset(self):
        queryset = GeoData.objects.all()
        return queryset

filters.py:

import django_filters 
from rest_framework_gis import filters
from rest_framework_gis.filterset import GeoFilterSet

from .models import GeoData

class IntersectionFilter(GeoFilterSet):
    slug_name = django_filters.CharFilter(name='slug_name', lookup_type='exact')
    geometry = filters.GeometryFilter(name='geometry', lookup_type='intersects')

    filter_overrides = {}

    class Meta:
        model = GeoData

Теперь при вызове моего URL: http://localhost:8000/geodata/?geometry='LINESTRING (...)' (также с геометрией в srid 3857), я всегда получаю пустой результат (даже для геометрии я уверен, что они имеют пересечение с GeoData объекты).

Что я неправильно понял?

Конфигурация:

  • Django==1.9.10
  • django-filter==0.15.2
  • djangorestframework==3.4.7
  • djangorestframework-gis==0.10.1

0 ответов

Другие вопросы по тегам