day25 stark组件开发之排序功能

基类新增排序条件请求函数

    order_list = []

    def get_order_list(self):
        return self.order_list or ['-id', ]

基类中页面函数逻辑变更

 def changelist_view(self, request):
        """
        列表页面
        :param request:
        :return:
        """
        # self.request = request
        # ########## 0. 获取排序 ##########
        order_list = self.get_order_list()
        queryset = self.model_class.objects.all().order_by(*order_list)
        # ########## 1. 处理分页 ##########
        all_count = queryset.count()

        query_params = request.GET.copy()
        query_params._mutable = True

        pager = Pagination(
            current_page=request.GET.get('page'),
            all_count=all_count,
            base_url=request.path_info,
            query_params=query_params,
            per_page=self.per_page_count,
        )

        data_list = queryset[pager.start:pager.end]

        # ########## 2. 处理表格 ##########
        list_display = self.get_list_display()
        # 1. 处理表格的表头
        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)

        # 2. 处理表的内容
        data_list = queryset

        body_list = []
        for row in data_list:
            tr_list = []
            if list_display:
                for key_or_func in list_display:
                    if isinstance(key_or_func, FunctionType):
                        tr_list.append(key_or_func(self, row, is_header=False))
                    else:
                        tr_list.append(getattr(row, key_or_func))  # obj.gender
            else:
                tr_list.append(row)
            body_list.append(tr_list)


        # ##########3. 添加按钮 #########
        add_btn = self.get_add_btn()

        return render(
            request,
            'stark/changelist.html',
            locals()
            # {
            #     'data_list': data_list,
            #     'header_list': header_list,
            #     'body_list': body_list,
            #     'pager': pager
            # }
        )

stark组件可以自定义传排序条件

posted @ 2022-02-20 21:05  simon_T  阅读(27)  评论(0编辑  收藏  举报