【问题标题】:Haystack Faceted: __init__() got an unexpected keyword argument 'facet_fields'Haystack Faceted:__init__() 有一个意外的关键字参数“facet_fields”
【发布时间】:2016-08-25 19:08:51
【问题描述】:

在享受 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'),
)

我收到以下错误:

/tag_analytics/faceted_search/ 处的类型错误

__init__() 得到了一个意外的关键字参数“facet_fields”

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

FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs)

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

/tag_analytics/faceted_search/ 处的类型错误

切片索引必须是整数或 None 或具有 __index__ 方法

提前感谢任何线索!

最好的, 艾伦

【问题讨论】:

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

标签: python django django-haystack faceted-search


【解决方案1】:

文档是错误的,而且令人困惑。您不能将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'),

【讨论】:

  • 感谢您的解释!刚刚更正了一个小错字,现在运行良好!
  • @AlanTygel 我收到一个错误:此答案未定义名称“FacetedSearchForm”。如果使用urls.py变种没有错误,也没有结果,不知道为什么
  • @VicNicethemer 你必须导入它:from haystack.forms import FacetedSearchForm。这是在 OPs 问题中假设的。
  • @solarissmoke 已导入 - 没有结果,没有方面。索引重建,结果通常出现在简单视图中
  • @VicNicethemer 建议您提出一个新问题,然后详细说明您的问题。
猜你喜欢
  • 2018-04-26
  • 1970-01-01
  • 2019-01-05
  • 2021-10-29
  • 2014-09-14
  • 2015-01-27
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多