• 周四. 3月 30th, 2023

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

django-restframwork filter查询源码分析

admin

11月 28, 2021

视图类继承了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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注