datatables.py 文件源码

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

项目:prngmgr 作者: wolcomm 项目源码 文件源码
def __init__(self, query_set=None, serializer_class=None,  # noqa
                 query_params=None, static_filter=None, static_exclude=None,
                 static_order=None):
        """Initialise view instance."""
        if not isinstance(query_params, QueryParams):
            raise TypeError("%s not an instance of QueryParams" % query_params)
        if not isinstance(query_set, QuerySet):
            raise TypeError("%s not an instance of QuerySet" % query_set)
        if not issubclass(serializer_class, serializers.BaseSerializer):
            raise TypeError("%s not a subclass of BaseSerializer"
                            % serializer_class)
        query = query_params.query
        if not query:
            self._response = Response(status=status.HTTP_400_BAD_REQUEST)
        else:
            base = query_set
            records_total = base.count()
            filter_value = query['search']['value']
            filter_query = Q()
            exclude_query = Q()
            if static_filter:
                filter_query |= static_filter
            elif filter_value:
                filter_cols = []
                for col_index in query['columns']:
                    if query['columns'][col_index]['searchable']:
                        filter_cols.append(query['columns'][col_index]['name'])
                for col in filter_cols:
                    filter_query |= Q(**{"%s__icontains" % col: filter_value})
            if static_exclude:
                exclude_query |= static_exclude
            filtered = base.filter(filter_query).exclude(exclude_query)
            records_filtered = filtered.count()
            order_by_columns = list()
            if static_order:
                order_by_columns.append(static_order)
            else:
                for i in query['order']:
                    col_index = query['order'][i]['column']
                    col_name = query['columns'][col_index]['name']
                    if query['order'][i]['dir']:
                        order_by_columns.append("-%s" % col_name)
                    else:
                        order_by_columns.append(col_name)
            ordered = filtered.order_by(*order_by_columns)
            page_start = query['start']
            page_end = page_start + query['length']
            page = ordered[page_start:page_end]
            serializer = serializer_class(
                page, many=True, context={'request': query_params.request})
            data = serializer.data
            response = {
                'draw': query['draw'],
                'recordsTotal': records_total,
                'recordsFiltered': records_filtered,
                'data': data,
            }
            self._response = Response(response)
评论列表


问题


面经


文章

微信
公众号

扫码关注公众号