Django Rest Framework,通过GET请求传递参数,基于分类的视图 [英] Django Rest Framework, passing parameters with GET request, classed based views
问题描述
我希望用户向我的Django REST API发送GET请求:
I would like a user to send a GET request to my Django REST API:
127.0.0.1:8000/model/?radius=5&longitude=50&latitude=55.1214
及其经度/纬度和半径,传入参数,然后使用GeoDjango获取查询集。
with his longitude/latitude and radius, passed in parameters, and get the queryset using GeoDjango.
例如,当前我有:
class ModelViewSet(viewsets.ModelViewSet):
queryset = Model.objects.all()
我理想的是想要的是:
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')
现在有一些直接错误:
1) request
未定义-我应该使用api_view,即
1) request
is not defined - should I use api_view, i.e. the function based view for this?
2) DRF页面表示request.data仅适用于POST,PUT和PATCH方法。如何使用GET发送参数?
2) DRF page says that request.data is for POST, PUT and PATCH methods only. How can send parameters with GET?
推荐答案
您可以覆盖 get_queryset
方法为了这个目的。至于查询字符串参数,没错, request.data
保存POST数据,您可以通过 request.query_params $ c获取查询字符串参数。 $ c>
You can override get_queryset
method for that purpose. As for query string parameters, you are right, request.data
holds POST data, you can get query string params through 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
这篇关于Django Rest Framework,通过GET请求传递参数,基于分类的视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!