一:需求
在crm系统中对数据展示时候,我们应该提供接口给使用我们stark组件的用户自定制排序方法。从而达到个性化排序数据
二:所需知识点
order_by
三:实现思路
- 在用户接口类中定制排序列表
- 在stark组件中设置默认排序方式
- 在显示列表之前获取排序方式,在默认情况下会优先找到用户接口,用户接口没有设置会找我们默认接口排序
- 在视图函数中,获取数据后进行排序
四:实现代码
应用.stark.py:
class UserHandler(StarkHandler): order_list = ['-age'] # 自定义排序方法 site.register(models.UserInfo, UserHandler)
stark.py:
class StarkHandler(object):
order_list = ['-id'] #默认以id排序
def get_order_list(self):
"""
拿到用户设置排序方法或者默认排序方法
"""
return self.order_list # 拿到排序方法
def changelist_view(self, request): """ 用户列表函数 :return: """ # 1 处理排序 order_list = self.get_order_list() #拿到排序条件 query_set = self.model_class.objects.all().order_by(*order_list) #将排序条件放入查询语句中
这里要注意,排序是以列表的形式,可能有多个字段,所以在传入排序条件的时候需要带上*
# 2 处理页码 # all_count = self.model_class.objects.all().count() all_count = query_set.count() query_params = request.GET.copy() query_params._mutable = True page = 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 = query_set[page.start:page.end] #将带有定制排序的数据传给前端