stark组件开发之排序

ordered_list = []  # 排序规则由 用户指定。
    def get_ordered_list(self):
        return self.ordered_list or ["id", ]  # 默认使用 id 进行排序

    per_page = 10  # 默认每页显示,多少数据。 也可在子类中,自行定制
    def check_list_view(self, request):
        '''
        列表查看页面
        :param request:
        :return:
        '''
        # self.request = request  # 进入查看页面,为request赋值! 使其他地方可以用到!
        list_display = self.get_list_display()
        # 页面要显示的列 self.list_display  示例:['name', 'age', 'depart']

        # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
        # self.model_class._meta.get_field('name').verbose_name
        header_list = []  # 表头
        if list_display:
            for key_or_func in list_display:
                if isinstance(key_or_func, FunctionType):  # 判断当前参数, 是一个字符串还是一个函数。
                    verbose_name = key_or_func(self, obj=None, is_header=True)
                else:
                    verbose_name = self.model_class._meta.get_field(key_or_func).verbose_name
                header_list.append(verbose_name)
        else:
            header_list.append(self.model_class._meta.model_name)

        # ##################获取排序######################
        order_list = self.get_ordered_list()

        # 2. 处理 从数据库 取到的数据   # 用户访问的表  self.model_class
        query_set = self.model_class.objects.all().order_by(*order_list)  # 计算总数量,和 表格显示内容时,都需要,就提取出来了
        #   2.1 ###############处理分页#################
        '''1.根据用户访问页面,计算出索引的位置, 比如 page=3
            2. 生成html页码
        '''
        all_count = query_set.count()
        query_params = request.GET.copy()  # page=1&level=2
        query_params._mutable = True  # request.get中的值默认是不能被修改的。加上这句代码就可以修改了

        pager = Pagination(
            current_page=request.GET.get("page"),  # 用户访问的当前叶
            all_count=all_count,  # 数据库一共有多少数据
            base_url=request.path_info,  # 所在的url 就是 ?page=1 之前的URL
            # 用于保留,用户的请求信息,比如 level=2 被用户先选中。 那么分页后。因为查询的东西少了,分页也应该想要的减少,
            # 但是level=2这个, 请求的信息!不能因为。分页的原因。而减少。
            query_params=query_params,
            per_page=self.per_page,  # 每页显示多少数据。
        )

        #  2.1  ###############处理表格#################
        data_list = query_set[pager.start:pager.end]

        body_list = []
        for row in data_list:
            row_list = []
            if list_display:
                for key_or_func in list_display:
                    if isinstance(key_or_func, FunctionType):
                        # 这里is_header=False  obj=row(数据库中循环的每一行的对象)
                        row_list.append(key_or_func(self, obj=row, is_header=False))
                    else:
                        row_list.append(getattr(row, key_or_func))
            else:
                row_list.append(row)
            body_list.append(row_list)
        # 3 ############# 处理添加按钮####################
        add_btn = self.get_add_btn()

        return render(request, "stark/changelist.html",
                      {"header_list": header_list, "data_list": data_list,
                       "body_list": body_list,
                       "pager": pager,
                       "add_btn": add_btn})

也可以在,自己的类中指定。 排序的方式。

猜你喜欢

转载自www.cnblogs.com/chengege/p/10742019.html