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组件可以自定义传排序条件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具