Django集成Haystack+Solr执行rebuild_index时遇AttributeError报错求助
解决Django 2.0 + Haystack 2.4.0执行
rebuild_index时的AttributeError问题 这个报错的核心原因很明确:Django 2.0彻底移除了BaseCommand.option_list属性,而你使用的Haystack 2.4.0版本是在Django 2.0发布前开发的,代码里还在依赖这个已经被废弃的API,所以执行命令时就会触发这个属性错误。
下面给你几个可行的解决方案,按推荐程度排序:
优先推荐:升级Haystack到兼容版本
Haystack从2.5.0版本开始正式支持Django 2.0,只需要执行以下命令升级:pip install django-haystack>=2.5.0升级完成后,重新运行
python manage.py rebuild_index,这个问题应该就能直接解决了。这是最省心也最符合长期维护的方案。应急方案:手动修改Haystack源码(不推荐长期使用)
如果因为项目依赖限制暂时无法升级Haystack,你可以手动修改Haystack的命令代码来适配Django 2.0的API:- 找到你的Python环境中Haystack的安装目录,定位到
management/commands/rebuild_index.py文件 - 把文件中原来的
option_list属性定义,替换成add_arguments方法,示例代码如下:def add_arguments(self, parser): parser.add_argument('--noinput', action='store_false', dest='interactive', default=True, help='Tells Django to NOT prompt the user for input of any kind.') parser.add_argument('--verbosity', action='store', dest='verbosity', default=1, type=int, choices=[0, 1, 2], help='Verbosity level; 0=minimal output, 1=normal output, 2=all output') parser.add_argument('--using', action='store', dest='using', default=None, help='Update only the specified search backend.')
注意:除了
rebuild_index,update_index等其他Haystack管理命令可能也存在同样的问题,需要逐一修改,所以这个方案只适合临时应急,长期来看还是升级Haystack更靠谱。- 找到你的Python环境中Haystack的安装目录,定位到
备选方案:降级Django到1.x版本
如果你的项目还没有用到Django 2.0的新特性,可以考虑降级到Django 1.11(LTS版本),它仍然支持option_list属性,和Haystack 2.4.0兼容:pip install django==1.11.x不过这个方案会让你错过Django 2.0及以后的功能更新,除非有特殊需求,否则不建议采用。
内容的提问来源于stack exchange,提问作者Ahmad M Ibrahim
相关产品推荐
相关产品推荐

