He creado la funcionalidad básica de mapeo de Django a través de este tutorial , pero Python sigue gastando 32 GB de RAM y/o el navegador falla, presumiblemente porque la consulta no se limita a los primeros n resultados y la base de datos tiene millones de entradas.
Mi "vietsets.py":
from rest_framework import viewsets from rest_framework_gis import filters from core.models import Tablename from core.serializers import MarkerSerializer class MarkerViewSet(viewsets.ReadOnlyModelViewSet): bbox_filter_field = "geom" filter_backends = (filters.InBBoxFilter,) queryset = Tablename.objects.all() serializer_class = MarkerSerializer
Creo que InBBoxFilter
debe elaborarse, pero los documentos no parecen mencionar más opciones. Los documentos dicen "si está usando otros filtros, querrá incluir su otro backend de filtro en su vista" dando el ejemplo, filter_backends = (InBBoxFilter, DjangoFilterBackend,)
, pero solo quiero limitar la cantidad de resultados para el funcionalidad InBBoxFilter
ya proporciona. ¿Puedo escribir algún tipo de DjangoFilterBackend
para limitar los resultados? ¿O es mejor abordar esto a través de la funcionalidad django-rest-framework?
¿Cómo puedo decirle que limite la cantidad de resultados o que mejore el rendimiento al usar bases de datos grandes?
Cambiar a abajo. Esta paginación es compatible con restframework_gis.
from rest_framework import viewsets from rest_framework_gis import filters from rest_framework_gis.pagination import GeoJsonPagination from core.models import Tablename from core.serializers import MarkerSerializer class MarkerViewSet(viewsets.ReadOnlyModelViewSet): bbox_filter_field = "geom" filter_backends = (filters.InBBoxFilter,) queryset = Tablename.objects.all() serializer_class = MarkerSerializer pagination_class = GeoJsonPagination
Puede actualizar su servidor o limitar el resultado (paginación). La paginación más apropiada depende de su solicitud. Puede agrupar el área por alguna regla o lo que sea.
Puede usar Pagination
https://www.django-rest-framework.org/api-guide/pagination/
from rest_framework import viewsets from rest_framework_gis import filters from rest_framework.pagination import PageNumberPagination from core.models import Tablename from core.serializers import MarkerSerializer class StandardResultsSetPagination(PageNumberPagination): page_size = 100 page_size_query_param = 'page_size' max_page_size = 1000 class MarkerViewSet(viewsets.ReadOnlyModelViewSet): bbox_filter_field = "geom" filter_backends = (filters.InBBoxFilter,) queryset = Tablename.objects.all() serializer_class = MarkerSerializer pagination_class = StandardResultsSetPagination # request host/api/<your_url>?page=<page_num>&page_size=<page_size> # will limit size of your response # and response will include current_page, number_of_elements and last_page.