Django Haystack教程报错:__call__()收到意外关键字参数'version'
解决Django Haystack + Elasticsearch 7的
__call__() got an unexpected keyword argument 'version'错误 嘿,这个问题我之前碰到过好几次,大概率是Haystack版本和Elasticsearch 7不兼容导致的!别慌,我一步步给你说怎么解决,以及后续排查需要的信息:
核心原因
旧版的Django Haystack(比如v2.x系列)的Elasticsearch后端在调用ES客户端时,会传递version这个参数,但Elasticsearch 7对应的Python客户端已经移除了这个参数,所以就会抛出这个不识别参数的错误。
快速修复步骤
- 升级Haystack到兼容ES7的版本:你需要安装
django-haystack 3.0及以上版本,这是官方开始支持Elasticsearch 7+的版本。执行命令:pip install --upgrade django-haystack - 更换ES7专用的后端:打开你的
settings.py,把搜索引擎后端从旧的haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine改成ES7专属的:HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine', 'URL': 'http://127.0.0.1:9200/', # 你的ES地址 'INDEX_NAME': 'haystack', }, } - 重建索引:升级和改配置后,一定要重建索引确保结构兼容:
python manage.py rebuild_index
如果还是有问题,需要提供这些信息方便排查
因为你刚接触Django,可能不知道该给啥,我列几个关键的:
- 你的
requirements.txt内容,或者执行pip freeze后的输出(能看到django、haystack、elasticsearch-py这些包的具体版本) settings.py里关于Haystack的完整配置代码- 触发这个错误的具体操作代码(比如视图里的搜索逻辑,或者你运行的命令)
- 完整的错误栈traceback(不只是那一行错误,要包含所有调用栈信息,能帮我们定位具体是哪个环节出问题)
内容的提问来源于stack exchange,提问作者illiteratewriter
相关产品推荐
相关产品推荐

