满口金牙 2021-10-16 02:28 采纳率: 91.5%
浏览 81
已结题

django rest framework 怎么获取url参数

from drf_multiple_model.views import FlatMultipleModelAPIView
from api.pager import LimitPagination
from rest_framework import filters
from django.http import request

#视图函数
class SearchGroup(FlatMultipleModelAPIView):
    authentication_classes=[]     #取消全局用户认证
    permission_classes=[]       #取消全局权限验证
    throttle_classes=[]
   
     project_name=request.GET.get('project_anme')          # 此行出错,      这个类里面,我要怎么获取 url 传过来的 参数
     orderdate_gte=request.GET.get('order_date_gte')     # 此行出错,      这个类里面,我要怎么获取 url 传过来的 参数
     orderdate_ite=request.GET.get('order_date_ite')       # 此行出错,      这个类里面,我要怎么获取 url 传过来的 参数
    querylist=[
        {'queryset':models.Pro1.objects.filter(project_name__contains=project_name,order_date__gte=orderdate_gte,order_date__ite=orderdate_ite),
         'serializer_class': SearchGroupRebarSerializer,
        },
        {'queryset':models.Pro2.objects.filter(project_name__contains=project_name,order_date__gte=orderdate_gte,order_date__ite=orderdate_ite),
         'serializer_class': SearchGroupRebarSerializer,
        },
    ]
    pagination_class=LimitPagination   # 这个类分页只能用limit

  • 写回答

3条回答 默认 最新

  • 咕泡-三木 2021-10-16 14:42
    关注

    django-rest-framework 会对 django 中的request进行包装,所有不能按django那样来使用request对象

    解决办法:

    1. request.GET改为request.query_params,使用drf的方式获取url参数
    1. request 要写在方法里而不是类里,现在只是定义类,在之后收到请求才会实用类,前后关系错了

    稍后可以给你写个demo代码吧


    后面,querylist 的写法也有点问题,
    project_name__contains 是因为变量名叫project_name 还是 models.Pro2有一个属性名叫做project_name?


    更新:

    class SearchGroup(FlatMultipleModelAPIView):
        def initial(self, request, *args, **kwargs):
            super(SearchGroup, self).initial(request, *args, **kwargs)
            # 代码执行到这里时,说明请求已经收到,才可以从url获取数据
    
            project_name = request.query_params.get("project_anme")
            orderdate_gte = request.query_params.get("order_date_gte")
            orderdate_ite = request.query_params.get("order_date_ite")
    
            # 修改API视图的querylist属性,注意每次请求只可以self的,不要修改类,否则引发bug
            self.querylist = [
                {
                    "queryset": models.Pro1.objects.filter(
                        project_name__contains=project_name,
                        order_date__gte=orderdate_gte,
                        order_date__ite=orderdate_ite,
                    ),
                    "serializer_class": SearchGroupRebarSerializer,
                },
                {
                    "queryset": models.Pro2.objects.filter(
                        project_name__contains=project_name,
                        order_date__gte=orderdate_gte,
                        order_date__ite=orderdate_ite,
                    ),
                    "serializer_class": SearchGroupRebarSerializer,
                },
            ]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 修改了问题 10月16日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误