Есть хороший плагин django-spurl называется, конкретно к пагинации я его применяю вот так
{% load spurl %}
<a href="{% spurl path=request.get_full_path query=request.GET set_query="page={{ page }}" %}">{{ page }}</a>
Что тут происходит, сначала я заполняю весь query текущими параметрами GET запроса, а в set_query я просто меняю текущую страницу на мне нужную.
Работает просто идеально, все фильтры сохраняются