• django-restframwork filter查询源码分析


    视图类继承了ListModelMixin类

    class ListModelMixin(object):
        """
        List a queryset.
        """
        def list(self, request, *args, **kwargs):
            queryset = self.filter_queryset(self.get_queryset())
    
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)
    
            serializer = self.get_serializer(queryset, many=True)
            return Response(serializer.data)
    

    当请求过来时,先走get_queryset()方法,得到一个queryset对象,再将这个对象传入到filter_querysete方法中进行过滤。其运行流程如下(如果视图类中没有写filter_queryset方法则去

    GenericAPIView中找

    )

     如图所示:先for循环filter_backends中的类。然后加括号实例化,再调用过滤类中的filter_queryset方法。

     再过滤类中,调用自己的get_filter_class(view,queryset,view)

    再get_filter_class方法中,首先判断有没有filter_class类,和filter_fields字段。如果有,则运行对应代码,否则,返回None

  • 相关阅读:
    【应用】SVG饼状图
    【应用】图片翻转js
    userData IE
    cookie
    Local storage htm5
    全局ajax事件
    jQuery ajax序列化函数
    jQuery ajax中的get请求方法汇总
    $.ajax()
    nodejs安装错误
  • 原文地址:https://www.cnblogs.com/ltyc/p/15017453.html
Copyright © 2020-2023  润新知