How to paginate multiple queries in a single function-based-view or class-based-view in django?

I have a search function that queries multiple models. I have the expected results displayed in a html template and so far all is fine. The problem is that I want to paginate the results using django's built in Pagination class. Pagination with multiple models is where I'm now stuck. I have other class based views working well paginating single models.

def search_results(request):

    if request.method == 'POST':

        searched = request.POST['searched']

        books = Book.objects.filter(description__icontains=searched,
        sermons = Sermon.objects.filter(description__icontains=searched,
        other_sermons = SermonsByOtherFathers.objects.filter(description__icontains=searched,
        other_books = BooksByOtherFathers.objects.filter(description__icontains=searched,

        context = {
            'searched': searched,
            'sermons': sermons,
            'other_sermons': other_sermons,
            'books': books,
            'other_books': other_books,

        if searched == "":
            return HttpResponse('Please type something in the search input.')
        return render(request, "search_results.html", context)

This is a simplified version of my html template.

{% for book in books %}
              <a href="{{ book.book_instance.url }}"> {{ book.title }} </a>
              <p> {{}} </div>
              <p> {{ book.category }} </p>  
              <p> {{ book.description }} </p>           
{% endfor %}

<-- ...and the same loops goes for the rest of the other querysets. --> 

{% for book in other_books %}
   <-- code here -->
 {% endfor %}

{% for sermon in sermons %}
   <-- code here -->
 {% endfor %}

{% for sermon in other_sermons %}
   <-- code here -->
 {% endfor %}

Any help with the django multiple-model pagination part will be appreciated.

Back to Top