title: django-tables2/django-filter - pagination with filterclass
body: <p>Good Afternoon,</p>
  
  <p>I am using a custom django-filter in django-tables2 to search all fields with a single input. Ive just noticed that when I search I lose my pagination menu.</p>
  
  <p>this is the link to the filter code <a href="https://spapas.github.io/2016/09/12/django-split-query/" rel="nofollow noreferrer">https://spapas.github.io/2016/09/12/django-split-query/</a> </p>
  
  <p>here's my filter </p>
  
  <pre><code>class SiteFilterEx(django_filters.FilterSet):
      ex = django_filters.CharFilter(label='Ex filter', method='filter_ex')
      search_fields = ['location', 'bgp_as', 'opening_date','town','postcode']
  
      def filter_ex(self, qs, name, value):
          if value:
              q_parts = value.split()
  
              # Use a global q_totals
              q_totals = Q()
  
              # This part will get us all possible segmantiation of the query parts and put it in the possibilities list
              combinatorics = itertools.product([True, False], repeat=len(q_parts) - 1)
              possibilities = []
              for combination in combinatorics:
                  i = 0
                  one_such_combination = [q_parts[i]]
                  for slab in combination:
                      i += 1
                      if not slab: # there is a join
                          one_such_combination[-1] += ' ' + q_parts[i]
                      else:
                          one_such_combination += [q_parts[i]]
                  possibilities.append(one_such_combination)
  
              # Now, for all possiblities we'll append all the Q objects using OR
              for p in possibilities:
                  list1=self.search_fields
                  list2=p
                  perms = [zip(x,list2) for x in itertools.permutations(list1,len(list2))]
  
                  for perm in perms:
                      q_part = Q()
                      for p in perm:
                          q_part = q_part &amp; Q(**{p[0]+'__icontains': p[1]})
                      q_totals = q_totals | q_part
  
              qs = qs.filter(q_totals)
          return qs    
  
      class Meta:
          model = Site
          fields = ['ex']     
          form = SiteFilterForm  
  </code></pre>
  
  <p>in my template I can use:</p>
  
  <pre><code>Showing {{ filter.qs.count }} of {{ filter.queryset.count }} records 
  </code></pre>
  
  <p>but the default Django-tables uses</p>
  
  <pre><code>Showing {{ table.page.start_index }} to {{ table.page.end_index }} of {{ table.page.paginator.count }} records 
  </code></pre>
  
  <p>and when I filter the pagination is gone completely.</p>
  
  <p>I think I need to return a paginate with the same name some how? but am unsure of what I need to do?</p>
  
  <p>here's the code from the view:</p>
  
  <pre><code>class Sites(LoginRequiredMixin, ExportMixin, SingleTableMixin, FilterView):
      model = Site
      table_class = SiteTable
      template_name = "app_settings/table_view.html"
      login_url = '/login/'
      redirect_field_name = 'redirect_to'
      filterset_class = SiteFilterEx
      exclude_columns = ("buttons", )
  
      def dispatch(self, *args, **kwargs):
          site_type = get_object_or_404(SiteType, pk=self.kwargs['site_type'])
          site_state = 'Open' if self.kwargs['state'] else 'Closed'
          self.site_type_name = '{} {}s'.format(site_state, site_type.site_type)
          self.site_type_icon = 'fa {}'.format(site_type.icon)
          return super(Sites, self).dispatch(*args, **kwargs)
  
      def get_queryset(self):
          site_type = self.kwargs['site_type']
          subnet = Subquery(
              DeviceCircuitSubnets.objects.filter(device__site_id=OuterRef('id'), \
                                          active_link=True, \
                                          circuit__decommissioned=False
                                          ).values('circuit__name')[:1])        
          active_circuit = Subquery(
              DeviceCircuitSubnets.objects.filter(device__site_id=OuterRef('id'), \
                                          active_link=True, \
                                          circuit__decommissioned=False
                                          ).values('circuit__name')[:1])
          if site_type:
              return super(Sites, self).get_queryset().filter(
                  is_live=self.kwargs['state'], site_type_id=site_type
              ).annotate(
                  active_circuit=active_circuit
              ).prefetch_related('sitesupernet_set')
          else:
              return super(Sites, self).get_queryset().filter(
                  is_live=self.kwargs['state']
              ).annotate(
                  active_circuit=active_circuit
              ).prefetch_related('sitesupernet_set')
  
      def get_context_data(self, **kwargs):
          context = super().get_context_data(**kwargs)     
          context['page_icon']=self.site_type_icon
          context['page_title']=self.site_type_name 
          return context  
  </code></pre>