2016-04-30 85 views
2

在用Haystack 2.4.1(Django 1.8)享受我的第一个结果的同时,我不得不承认我很难学习它。这些文档有时是不完整的,有些功能只有几个例子。Haystack Faceted:__init __()得到了一个意想不到的关键字参数'facet_fields'

分面搜索就是其中之一。

我正在关注的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

感谢任何线索!

最好, 艾伦

+1

我有一个“解决方案”,我怀疑是正确的,因为这意味着文档是完全错误的。无论如何,在url.py我用'FacetedSearchView.as_view(form_class)'从'haystack.views'导入FacetedSearchView'从'haystack.generic_views导入FacetedSearchView'和'FacetedSearchView(form_class = FacetedSearchForm,facet_fields = ['author']) = FacetedSearchForm,facet_fields = ['author'],template_name ='search.html',context_object_name ='page_object')'。它有效,但我仍然想要了解问题所在! –

回答

7

的文件是错误的,和混乱。您无法将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'), 
+0

感谢您的解释!只是纠正了一个小错字,现在它的工作很好! –

+0

@AlanTygel我得到一个错误:名称'FacetedSearchForm'没有与这个答案定义。如果使用urls.py变体没有错误,但也没有结果,不知道为什么 –

+0

@VicNicethemer你必须导入它:'从haystack.forms导入FacetedSearchForm'。这是在OP的问题中假设的。 – solarissmoke

相关问题