Django3.2报错type object 'Book' has no attribute 'published_objects'如何解决
问题修复方案
步骤1:修复模型隐藏错误
你当前Book模型的Meta类中ordering = ('-category', )引用了不存在的category字段,该问题会导致模型加载异常,先将排序规则修改为实际存在的字段,例如按发布时间倒序:
class Book(models.Model): # 省略其他字段定义 class Meta: # 将不存在的category字段替换为已定义的publish/updated_at等字段 ordering = ('-publish', )
步骤2:重启Django Shell
已经启动的python manage.py shell进程不会自动加载修改后的models.py代码,你操作的仍是修改前的旧版本Book类,因此找不到新增的published_objects管理器。
操作流程:
- 退出当前shell(执行
exit()或按快捷键Ctrl+D) - 重新执行命令启动shell:
python manage.py shell - 重新导入模型后测试:
# 替换your_app为你实际的Django应用名 from your_app.models import Book Book.published_objects.all()
其他排查说明
- 自定义管理器属于Python层面逻辑,不需要执行数据库迁移
- 确认
PublishedManager类定义在Book类之前,你当前代码的顺序符合要求 - 确认shell中导入的
Book类是你修改的对应应用下的模型,不要导入其他应用的同名模型
内容的提问来源于stack exchange,提问作者Nightman Play
相关产品推荐
相关产品推荐

