Reputation: 117
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
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