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