Django Rest Framework,通过GET请求传递参数,基于分类的视图 [英] Django Rest Framework, passing parameters with GET request, classed based views

查看:644
本文介绍了Django Rest Framework,通过GET请求传递参数,基于分类的视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望用户向我的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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆