views.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:2017.2-SiGI-Op_API 作者: fga-gpp-mds 项目源码 文件源码
def list(self, request):  # pylint: disable=too-many-locals

        query_objects = self.class_name.objects  # pylint: disable=no-member
        queryset = query_objects.all().order_by(
            self.order_param_name
            )
        if request.GET.get('search'):
            queryset = []
            param = self.request.query_params.get('search', None)
            if param is not None:
                fields_class = self.class_name
                fields = fields_class._meta.fields  # pylint: disable=no-member

                fields_char = [
                    f for f in fields
                    if isinstance(f, CharField)]
                fields = [
                    f for f in fields
                    if not isinstance(f, CharField)]
                queries_char = [
                    Q(**{f.name+'__contains': param})
                    for f in fields_char]
                try:
                    param_num = int(param)
                except ValueError:
                    param_num = 0
                queries = [Q(**{f.name: param_num}) for f in fields]
                print(fields)
                _queries = Q()
                for query in queries:
                    _queries = _queries | query
                for query in queries_char:
                    _queries = _queries | query
                objects = self.class_name.objects  # pylint: disable=no-member
                queryset = objects.filter(_queries)
        if request.GET.get('all'):
            self.pagination_class = None
            serializer = self.serializer_class(  # pylint: disable=not-callable
                queryset,
                many=True)
            response = Response(serializer.data)
        else:
            paginator = pagination.PageNumberPagination()
            queryset = paginator.paginate_queryset(
                queryset=queryset,
                request=request
                )
            serializer = self.serializer_class(  # pylint: disable=not-callable
                queryset,
                many=True)
            response = paginator.get_paginated_response(serializer.data)

        return response
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号