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