Django - TypeError:“方法”类型的对象没有 len()
Posted
技术标签:
【中文标题】Django - TypeError:“方法”类型的对象没有 len()【英文标题】:Django - TypeError: object of type 'method' has no len() 【发布时间】:2022-01-04 16:39:42 【问题描述】:我正在尝试使用一些在线代码将分页器添加到我的网站,但出现此错误 返回 len(self.object_list) TypeError:“方法”类型的对象没有 len()
Views.py
定义样本(请求):
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 )
Models.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.name
【问题讨论】:
【参考方案1】:你需要调用.all()
,否则它是对方法的引用,所以你使用:
# call .all() ↓↓
wallpapers = Wallpaper.objects.all()
您需要调用它的原因是因为 Paginator
需要可迭代且具有长度的内容,例如列表或 QuerySet
。
【讨论】:
以上是关于Django - TypeError:“方法”类型的对象没有 len()的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:不支持的操作数类型/:'str'和'str'django setting.py
Django TypeError:“PosixPath”类型的参数不可迭代
Django TypeError:用户类型的对象不是 JSON 可序列化的
Django Rest Framework TypeError需要一个类似字节的对象,而不是'str'
/writeReview/1 __str__ 处的 Django 模型 TypeError 返回非字符串(int 类型)
如何在其上制作一个简单的 Django URLconf 和 reverse() 进行测试? (获取TypeError:不可散列的类型:'list')