jquery datatable 通过ajax从后台获取每个分页数据后,搜索框无法搜索问题

35 篇文章 0 订阅
20 篇文章 0 订阅

当我们通过如下的ajax到后台获取数据

permissionTable = $('#permissionTable').DataTable({
        "ajax": {
            "url": "/user/permission_get",
            "data": function(d) {
                d.type = 'getPermissionTable'
            }
        },})
这个ajax只会返回当前请求页的数据,而不是所有页的数据
这时候会发现,datatable生成的搜索框是无法搜索的,因为只是获取了当前页的数据,其他页的数据是没有的,只有点击分页才会有点击页的数据,导致搜索失败

要解决这个问题,需要从后台中添加搜索操作的判断来响应搜索请求,如下:

request请求处理:

type = request.GET.get('type','')
if type== 'getPermissionTable':
	start =int(request.GET.get('start'))
	length = int(request.GET.get('length'))
	search = (request.GET.get('search[value]'))
	orderable = {
		'1':'permission__name',
		'2':'permission__codename',
		'3':'Type__name'
	}
	###模糊搜索
	qs = Q()
	for index in range(1,4):
		qs = qs | Q(**{orderable[str(index)]+"__icontains":search})
	if search:
		#当有搜索操作时
		return JsonResponse(searchPerAndType(start,length,qs))
	else:
		#当没有搜索操作时
		return JsonResponse(getPerAndType(start,length))
请求搜索函数searchPerAndType:

def searchPerAndType(start,length,qs):
	tableDict = {
		'recordsTotal':perType.objects.all().count(),
		'recordsFiltered':perType.objects.filter(qs).order_by('Type__name').count(),
		'data':[]
	}
	for item in perType.objects.filter(qs).order_by('Type__name')[start:start+length]:
		tableDict['data'].append({'id':item.id,
					 'name':item.permission.name,
					 'url':item.permission.codename,
					 'modalname':item.Type.name,
					 })

	return tableDict
一般的分页数据请求函数getPerAndType:

def searchPerAndType(start,length,qs):
	tableDict = {
		'recordsTotal':perType.objects.all().count(),
		'recordsFiltered':perType.objects.filter(qs).order_by('Type__name').count(),
		'data':[]
	}
	for item in perType.objects.filter(qs).order_by('Type__name')[start:start+length]:
		tableDict['data'].append({'id':item.id,
					 'name':item.permission.name,
					 'url':item.permission.codename,
					 'modalname':item.Type.name,
					 })

	return tableDict

如此如此,就可以搜索了










  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值