Me gustaría que un usuario envíe una solicitud GET a mi API REST de Django:
127.0.0.1:8000/model/?radius=5&longitude=50&latitude=55.1214
con su longitud/latitud y radio, pasados los parámetros y obtener el conjunto de consultas usando GeoDjango.
Por ejemplo, actualmente tengo:
class ModelViewSet(viewsets.ModelViewSet): queryset = Model.objects.all()
Y lo que idealmente quiero es:
class ModelViewSet(viewsets.ModelViewSet): radius = request.data['radius'] location = Point(request.data['longitude'],request.data['latitude'] # filter results by distance using geodjango queryset = Model.objects.filer(location__distance_lte=(location, D(m=distance))).distance(location).order_by('distance')
Ahora un par de errores inmediatos:
1) la request
no está definida. ¿Debería usar api_view, es decir, la vista basada en funciones para esto?
2) La página DRF dice que request.data es solo para métodos POST, PUT y PATCH. ¿Cómo puedo enviar parámetros con GET?
Puede anular el método get_queryset
para ese propósito. En cuanto a los parámetros de cadena de consulta, tiene razón, request.data
contiene datos POST, puede obtener parámetros de cadena de consulta a través de request.query_params
def get_queryset(self): longitude = self.request.query_params.get('longitude') latitude= self.request.query_params.get('latitude') radius = self.request.query_params.get('radius') location = Point(longitude, latitude) queryset = Model.objects.filter(location__distance_lte=(location, D(m=distance))).distance(location).order_by('distance') return queryset
Tuve el mismo problema, para resolverlo puedes obtener parámetros de url con self.request.parser_context.get('kwargs')
bajo el método get_queryset
.