Напрашивается такой вариант.
Каждая кнопка шлет свой get-запрос.
Вьюха принимает get параметр, анализирует и отдает то что нужно.
Что то типа этого
class PostsListView(ListView): # представление в виде списка
model = Post
context_object_name = 'posts'
template_name = 'blog/post_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['category'] = Category.objects.all()
return context
def get_queryset(self, **kwargs):
result = super().get_queryset()
query = self.request.GET.get('q')
if query:
result = Post.objects.filter(category_id=query)
return result