django分页后过滤数据,要进行补全数据的方法

项目开发中遇到一个问题: 当分页后还要进行数据处理,可能导致原本分页返回的数据不足,那么需要从另外一页进行数据补全(也要数据进行过滤)。

自己写了一个小的组件:

def data_paging(queryset, page, limit, deal_func=None, *args, **kwargs):
# 创建分页器对象
paginator = Paginator(queryset, limit)
try:
# 尝试获取当前页码的数据
res = paginator.page(page)
except EmptyPage:
# 如果当前页码超出范围,返回空
res = list()
return res
except PageNotAnInteger:
# 如果页码不是整数,则返回第一页
res = paginator.page(1)
total_pages = paginator.num_pages
if deal_func:
return_data = deal_func([x for x in res], *args, **kwargs)
next_page_number = page
# 检查当前页的数据量是否满足每页的数量要求
while len(return_data) < limit and res.has_next():
# 尝试获取下一页的数据来补齐当前页
next_page_number += 1
try:
next_page = paginator.page(next_page_number)
except EmptyPage:
break
if next_page_number > total_pages:
break
next_page_data = deal_func([x for x in next_page], *args, **kwargs)
if len(next_page_data) + len(return_data) <= limit:
if next_page_data:
return_data.extend(next_page_data)
else:
if next_page_data:
return_data.extend(next_page_data[:limit - len(return_data)])
if len(return_data) >= limit:
break
return return_data
else:
res = [x for x in res]
return res

  上述中:

queryset: 整体查询出来的数据
page:第几页
limit:返回多少条
deal_func:过滤的函数(可以不传)
*args,**kwargs: 过滤函数传参

posted on 2024-02-21 12:25  一先生94  阅读(36)  评论(0编辑  收藏  举报

导航