def near(self, request, pk=None): signal = self.get_object() signals_for_geography_qs = Signal.objects.annotate( distance_from_point=Distance( 'location__geometrie', signal.location.geometrie), ).filter( (Q(parent__isnull=True) & Q(children__isnull=True)) | Q(parent__isnull=False), distance_from_point__lte=app_settings. SIGNAL_CONTEXT_GEOGRAPHY_RADIUS, category_assignment__category_id=signal. category_assignment.category.pk, created_at__gte=(timezone.now() - timezone.timedelta( weeks=app_settings. SIGNAL_CONTEXT_GEOGRAPHY_CREATED_DELTA_WEEKS)), ).exclude(pk=signal.pk) paginator = LinkHeaderPagination(page_query_param='geopage', page_size=4000) page = paginator.paginate_queryset(signals_for_geography_qs, self.request, view=self) if page is not None: serializer = SignalContextGeoSerializer( page, many=True, context=self.get_serializer_context()) return paginator.get_paginated_response(serializer.data) serializer = SignalContextGeoSerializer( page, many=True, context=self.get_serializer_context()) return Response(serializer.data)
def geography(self, request): filtered_qs = self.filter_queryset(self.get_queryset()) paginator = LinkHeaderPagination(page_query_param='geopage') page = paginator.paginate_queryset(filtered_qs, self.request, view=self) if page is not None: serializer = AreaGeoSerializer(page, many=True) return paginator.get_paginated_response(serializer.data) serializer = AreaGeoSerializer(filtered_qs, many=True) return Response(serializer.data)
def geography(self, request): # Makes use of the optimised queryset filtered_qs = self.filter_queryset( self.geography_queryset.filter_for_user( user=self.request.user ) ).order_by( 'id' # Oldest Signals first ) paginator = LinkHeaderPagination(page_query_param='geopage', page_size=4000) # noqa page_size = 2.5 times the average signals made in a day, at this moment the highest average is 1600 page = paginator.paginate_queryset(filtered_qs, self.request, view=self) if page is not None: serializer = SignalGeoSerializer(page, many=True) return paginator.get_paginated_response(serializer.data) serializer = SignalGeoSerializer(filtered_qs, many=True) return Response(serializer.data)