diff --git a/signalo/signalo_app/models.py b/signalo/signalo_app/models.py index da8dac0f..df48c219 100644 --- a/signalo/signalo_app/models.py +++ b/signalo/signalo_app/models.py @@ -18,6 +18,10 @@ class Pole(ComputedFieldsModel): def _serialized(self): return f'{{"id": "{str(self.id)}", "type": "Feature", "geometry": {self.geom.geojson}, "properties": {{"name": "{self.name}"}}}}' + @property + def geom_wkb(self): + return self.geom.hexewkb + class Sign(ComputedFieldsModel): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) diff --git a/signalo/signalo_app/views.py b/signalo/signalo_app/views.py index 73a3317a..4306daca 100644 --- a/signalo/signalo_app/views.py +++ b/signalo/signalo_app/views.py @@ -1,9 +1,12 @@ from django.conf import settings from django.contrib.gis.geos import Polygon from django.http import HttpResponse +from rest_framework.response import Response + from django_oapif.mixins import OAPIFDescribeModelViewSetMixin -from rest_framework import viewsets +from rest_framework import viewsets, serializers from rest_framework_gis.serializers import GeoFeatureModelSerializer +from rest_framework.pagination import LimitOffsetPagination from signalo_app.models import Pole, Sign @@ -17,12 +20,13 @@ def __init__(self, data): super(OapifResponse, self).__init__(data) -class PoleSerializer(GeoFeatureModelSerializer): +class PoleSerializer(serializers.ModelSerializer): # used only for API route + geom_wkb = serializers.ReadOnlyField() + class Meta: - model = Sign - fields = "__all__" - geo_field = "geom" + model = Pole + fields = ["id", "geom_wkb", "name", ] class SignSerializer(GeoFeatureModelSerializer): @@ -47,6 +51,7 @@ class SignViewset(OAPIFDescribeModelViewSetMixin, viewsets.ModelViewSet): class PoleViewset(OAPIFDescribeModelViewSetMixin, viewsets.ModelViewSet): serializer_class = PoleSerializer # used only for API route + pagination_class = LimitOffsetPagination oapif_title = "PoleOAPIFModel" oapif_description = "PoleOAPIFModel layer" oapif_geom_lookup = ( @@ -56,22 +61,6 @@ class PoleViewset(OAPIFDescribeModelViewSetMixin, viewsets.ModelViewSet): settings.SRID ) # (one day this will be retrieved automatically from the DB field) - def list(self, request, *args, **kwargs): - queryset = self.filter_queryset(self.get_queryset()) - - queryset = queryset.values_list("_serialized", flat=True) - - serialized_poles = [] - - page = self.paginate_queryset(queryset) - if page is not None: - for pole in page: - serialized_poles.append(pole or "") - return self.get_paginated_response(serialized_poles) - - for pole in queryset: - serialized_poles.append(pole or "") - return OapifResponse(serialized_poles) def get_queryset(self): if self.request.GET.get("bbox"):