def custom_paginator(request, queryset): try: page_size = int(request.GET.get('records', 10)) except ValueError: page_size = 10 paginator = Paginator(queryset, page_size) try: page_number = int(request.GET.get('page', 1)) except ValueError: page_number = 1 try: page = paginator.page(page_number) except Exception: page = None return page_size, page, page_number, paginator def process_order(sorting_order, queryset): if not sorting_order: return queryset method, order = sorting_order.split(':') if method == 'name': if order == 'ascending': # return queryset.order_by('name') return queryset.order_by('first_name', 'last_name') else: # return queryset.order_by('-name') return queryset.order_by('-first_name', '-last_name') if method == 'status': if order == 'ascending': return queryset.order_by('agency__activation_state') else: return queryset.order_by('-agency__activation_state') elif method == 'title': if order == 'ascending': return queryset.order_by('agency__jobtitle') else: return queryset.order_by('-agency__jobtitle') return queryset def search_users_new(request): query = request.GET.get('q', '') search_filter = _build_search_filter(query) users_queryset = ( users_impersonable(request) .filter(search_filter) .prefetch_related( 'agency', 'agency__employer', 'freelancer', 'freelancer__role', 'recruiter', 'network_hirer' ) ) sorting_order = request.GET.get('order') users_queryset = process_order(sorting_order, users_queryset) page_size, page, page_number, paginator = custom_paginator(request, users_queryset) template = 'backoffice/search_users_new.html' if request.is_ajax(): template = 'backoffice/search_users_table.html' return render(request, template, { 'users': users_queryset, 'paginator': paginator, 'page': page, 'page_number': page_number, 'query': query, 'redirect_field': get_redir_field(request), 'breadcrumbs': [ ('Backoffice', reverse('backoffice_index')), ('Search', None) ], 'page_size': page_size, })