Django-фильтр не работает с пагинацией Получение объекта типа 'PostsFilter' не имеет len()
Я пытаюсь заставить Django-Filter работать с Pagination - но он работает только когда я передаю 'posts' в Paginator - но когда я пытаюсь передать f - я получаю ошибку >>> object of type 'PostsFilter' has no len()
В остальном все работает нормально.
Есть ли предложения по обходному пути? Пожалуйста, посмотрите мой файл views.py.
views.py
def posts(request):
posts = Post.objects.all()
f = PostsFilter(request.GET, queryset=Post.objects.all())
paginator = Paginator(posts, 50)
page_number = request.GET.get("page")
posts_qs = paginator.get_page(page_number)
return render(request, 'posts/posts.html', {
'posts':posts_qs,
'filter':f,
'title':'Posts'
})
Вы на самом деле не фильтруете данные, поскольку вы создаете фильтр, а затем ничего с ним не делаете, кроме передачи в шаблон. Вы должны сначала пропустить данные через фильтр, а затем перечислить post_filter.qs
. Затем вы перечисляете .object_list
страницы, так:
def posts(request):
posts = Post.objects.all()
post_filter = PostsFilter(request.GET, queryset=posts)
paginator = Paginator(post_filter.qs, 50)
page_number = request.GET.get('page')
posts_qs = paginator.get_page(page_number)
return render(
request,
'posts/posts.html',
{'posts': posts_qs.object_list, 'filter': post_filter, 'title': 'Posts'},
)
That being said, I would strongly advise not to do pagination in a function-based view (FBV). We can work with a ListView
[Django-doc] making the process easier.