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



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

127.0.0.1:8000/model/?radius=5&longitude=50&latitude=55.1214

用他的经度/纬度和半径,传入参数,并使用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,即基于函数的视图吗?

2(DRF页面说request.data仅适用于POST,PUT和PATCH方法。如何使用 GET 发送参数?

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

我遇到了同样的问题,要解决它,您可以在 get_queryset 方法下使用 self.request.parser_context.get('kwargs') url 获取参数。

使用这种最简单的方法获取查询参数值:

request.GET.get("radius")

实际上对我有用.使用self.request.query_params.get("lead_contact_id")

def get_queryset(self,*args,**kwargs):
    # the lead id
    lead_contact_id = self.request.query_params.get("lead_contact_id")
    #  this filter base on the lead id  provided
    feedback = Feedback.objects.filter(object_id=lead_contact_id)
    return feedback

最新更新