Estaba intentando agregar un paginador a mi sitio web usando un código en línea, pero recibo este error. Devuelve len (self.object_list) TypeError: el objeto de tipo 'método' no tiene len()
Vistas.py
def muestra (solicitud):
WAllPAPER_PER_PAGE = 2 wallpapers = Wallpaper.objects.all page = request.GET.get('page', 1) wallpaper_paginator = Paginator(wallpapers, WAllPAPER_PER_PAGE) try: wallpapers = wallpaper_paginator.page(page) except EmptyPage: wallpapers = wallpaper_paginator.page(wallpaper_paginator.num_pages) except: wallpapers = wallpaper_paginator.page(WAllPAPER_PER_PAGE) context = {"wallpapers": wallpapers, 'page_obj': wallpapers, 'is_paginated': True, 'paginator': wallpaper_paginator} return render(request, "Wallpaper/sample.html", context )
Modelos.py
class Wallpaper(models.Model): name = models.CharField(max_length=100, null=True) size = models.CharField(max_length=50, null=True) pub_date = models.DateField('date published', null=True) resolution = models.CharField(max_length=100, null=True) category = models.ManyToManyField(Category) tags = models.ManyToManyField(Tags) Device_Choices = [ ('PC', 'pc'), ('mobile', 'mobile') ] Devices = models.CharField(max_length=20,choices=Device_Choices, default= 'PC') image = models.ImageField(upload_to='Wallpaper/Images/', default="") def __str__(self): return self.nameDebe llamar a .all() , de lo contrario, es una referencia a un método, por lo que trabaja con:
# call .all() ↓↓ wallpapers = Wallpaper.objects .all() La razón por la que necesita llamar a esto es porque Paginator espera algo que sea iterable y tenga una longitud, como una lista o un QuerySet .