Haystack Faceted:__init__() 得到了一个意外的关键字参数 'facet_fields'

Haystack Faceted: __init__() got an unexpected keyword argument 'facet_fields'

在享受 haystack 2.4.1 (Django 1.8) 的第一个结果时,我不得不承认我很难学习它。文档有时不完整,某些功能示例很少。

分面搜索就是其中之一。

我正在关注 documentation,在 url.py:

urlpatterns = patterns('haystack.views',
    url(r'^$', FacetedSearchView(form_class=FacetedSearchForm, facet_fields=['author']), name='haystack_search'),
)

我收到以下错误:

TypeError at /tag_analytics/faceted_search/

__init__() got an unexpected keyword argument 'facet_fields'

看起来 FacetSearchView 不接受 facet_fields 参数,这将我带到版本 2.4.0,而正确的方法是

FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs)

虽然我确定我的版本是 2.4.1,但我尝试了这个选项,并得到了

TypeError at /tag_analytics/faceted_search/

slice indices must be integers or None or have an __index__ method

提前感谢您提供任何线索!

最好的, 艾伦

文档是错误的,而且令人困惑。您不能将 facet_fields 传递给 FacetedSearchView 的构造函数。

您采用的方法是正确的,尽管您不应将所有这些参数都放在 url 定义中,您应该创建自己的视图 - 如下所示:

# tag_analytics/views.py
from haystack.generic_views import FacetedSearchView as BaseFacetedSearchView

# Now create your own that subclasses the base view
class FacetedSearchView(BaseFacetedSearchView):
    form_class = FacetedSearchForm
    facet_fields = ['author']
    template_name = 'search.html'
    context_object_name = 'page_object'

    # ... Any other custom methods etc

然后在urls.py:

from tag_analytics.views import FacetedSearchView
#...
url(r'^$', FacetedSearchView.as_view(), name='haystack_search'),