Django Rest框架,通过GET请求传递参数,基于类的视图

Django Rest框架,通过GET请求传递参数,基于类的视图,django,django-rest-framework,Django,Django Rest Framework,我希望用户向我的Django REST API发送GET请求: 127.0.0.1:8000/model/?radius=5&longitude=50&latitude=55.1214 使用他的经度/纬度和半径,传入参数,并使用GeoDjango获取queryset 例如,目前我有: class ModelViewSet(viewsets.ModelViewSet): queryset = Model.objects.all() 理想情况下,我想要的是: class

我希望用户向我的Django REST API发送GET请求:

127.0.0.1:8000/model/?radius=5&longitude=50&latitude=55.1214
使用他的经度/纬度和半径,传入参数,并使用GeoDjango获取queryset

例如,目前我有:

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)
请求
未定义-我是否应该使用api_视图,即基于函数的视图


2) 表示request.data仅用于POST、PUT和PATCH方法。如何使用GET发送参数?

您可以为此重写
GET\u queryset
方法。对于查询字符串参数,您是对的,
request.data
保存POST数据,您可以通过
request.query\u 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

modelviewset有几个方法,您可以在其中访问请求参数。比如def get_queryset(self)-self.request,这可能是您应该放置代码的地方。试试这个,让我知道这是可行的,但我必须在url.py中添加
路由器.register(r'model\u name',views.ModelViewSet,base\u name='model\u name')
。但是,现在POST请求给了我以下错误:无法使用视图名称“model detail”解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误配置了
lookup\u字段
属性。如果我传递一个布尔参数,该怎么办
self.request.query_params.get
返回一个字符串。是否有一种获取布尔参数的干净方法?还是应该进行字符串比较?@saran3h我认为没有办法直接从查询参数中获取布尔值,在这种情况下,您可能应该进行字符串比较。