我希望用户向我的Django 睡觉接口发送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) request未定义-我是否应该使用api_视图,即基于函数的视图?

2)DRF page表示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

Django相关问答推荐

在AWS s3中获取项目的URL

如何在Django模板中为无效词典查找打开异常?

通过 B 的外键列表访问模型 B 的行

django.template.response.ContentNotRenderedError: 必须渲染响应内容才能迭代

Django Rest Framework 认证类覆盖 request.user

更新或创建异步 Django ORM 实例

AttributeError:模块rest_framework.serializers在 Swagger 中的 Django 中没有属性NullBooleanField

如何在 gunicorn conf 文件中指定 uvicorn 工作人员

DeleteView 中的success_message 未显示

Django:使用 Django ORM 实现 JOIN?

多租户 Django 应用程序:根据请求更改数据库连接?

Django {{ MEDIA_URL }} 空白 @DEPRECATED

django - pisa:将图像添加到 PDF 输出

django npm 和 node 包架构

使用 XMLHttpRequest 提示下载文件

Django - 来自 QuerySet 的唯一列表

如何在 Django 中执行批量插入?

如何在 django 中将多张图片上传到博客文章

如何使 Django 表单字段仅包含字母数字字符

python/django中setattr和对象操作的区别