Django Haystack对接Solr搜索时报list无split属性如何解决
报错原因
你遇到的AttributeError: 'list' object has no attribute 'split'是两个问题共同导致的:
- 代码缩进错误,视图层的返回逻辑位置不对
- 高版本Solr(7.x及以上)和django-haystack的
count()方法存在兼容问题:Solr返回的统计结果为列表类型,但haystack内部处理时会尝试调用字符串的split()方法解析结果。
解决步骤
1. 修正视图函数缩进和统计逻辑
替换blog/views.py中的post_search函数代码如下:
def post_search(request): form = SearchForm() # 提前定义变量避免校验失败时报未定义错误 cd = None results = None total_results = 0 if 'query' in request.GET: form = SearchForm(request.GET) if form.is_valid(): cd = form.cleaned_data results = SearchQuerySet().models(Post).filter(content=cd['query']).load_all() # 用len()替代count()规避兼容问题 total_results = len(results) # 将返回逻辑移到校验成功的分支内 return render(request, 'blog/post/search.html', { 'form': form, 'cd': cd, 'results': results, 'total_results': total_results }) return render(request, 'blog/post/search.html', { 'form': form, 'cd': cd, 'results': results, 'total_results': total_results })
2. 校验Solr配置(如果修改后仍报错可按此排查)
- 确认你已经为
Post模型创建了haystack索引类,并且执行了python manage.py build_solr_schema生成了schema配置,将生成的配置替换掉Solr对应核心下的managed-schema文件后重启Solr服务 - 确认执行了
python manage.py update_index同步了模型数据到Solr索引库 - 确认
settings.py中的haystack连接配置正确,示例如下:
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 'URL': 'http://127.0.0.1:8983/solr/你的Solr核心名称', 'TIMEOUT': 300, } }
内容的提问来源于stack exchange,提问作者ecrire06
相关产品推荐
相关产品推荐

