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})
也可以在,自己的类中指定。 排序的方式。