Mphoza
Mphoza

Reputation: 117

Implement pagination and search filter in django

Please help I am trying to implement django pagination with search filter. I keep getting the following error:

TypeError at / object of type 'method' has no len()

The following is my code thus far:

def product_list(request, category_slug=None):
    search_term = ''
    category = None
    categories = Category.objects.all()
    adds = AddBanner.objects.all()
    products_list = Product.objects.filter(available=True).order_by("-updated_at")
    productsImage = ProductImage.objects.all()

    print(product_list)

    query = request.GET.get("search")
    if query:
        products_list = products_list.filter(
        Q(name__icontains=query) |
        Q(description__icontains=query)
        ).distinct



    paginator = Paginator(products_list, 10)  # Show 10 contacts per page
    page = request.GET.get('page')

    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator.num_pages)


    context = {
        'category': category,
        'categories': categories,
        'products': products,
        'productsImages': productsImage,
        'search_term': search_term,
        'adds': adds

    }
    return render(request, 'shop/product/list.html', context)

Upvotes: 1

Views: 700

Answers (1)

Sergey Miletskiy
Sergey Miletskiy

Reputation: 487

You missed parentheses here:

if query:
    products_list = products_list.filter(
    Q(name__icontains=query) |
    Q(description__icontains=query)
    ).distinct

It should be .distinct() That's why you are getting error type 'method' has no len()

Upvotes: 1

Related Questions