我下载django-haystack-1.1.0.tar.gz
,解压缩,然后将其中的haystack
目录复制到我的apps
目录,并将haystack
添加到我的INSTALLED_APPS
(还添加嗖,因为我也复制它),但当我重新启动服务器时,我得到500内部错误。然后我从handle_registrations()
删除实验haystack.__init__
,网站开始工作,但当我尝试通过haystack搜索时,我得到No fields were found in any search_indexes. Please correct this before attempting to search.
在settings.py中我还有:
HAYSTACK_SITECONF = 'search_sites'
HAYSTACK_SEARCH_ENGINE = 'whoosh'
HAYSTACK_WHOOSH_PATH = os.path.join(PROJECT_ROOT, 'mysite_search_sites')
然后我取消删除handle_registrations()
,从INSTALLED_APPS
删除haystack并重新启动服务器,现在我收到No module named search_sites
。
import haystack
和haystack.__version__
也有效,但haystack.management.commands
没有
有人可以帮帮我吗?
修改
我的追溯:
/lib/python2.7/django/core/handlers/base.py in get_response
response = callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/myproject/apps/djangobb_forum/util.py in wrapper
output = function(request, *args, **kwargs)
...
▶ Local vars
/myproject/apps/djangobb_forum/util.py in wrapper
result = func(request, *args, **kwargs)
...
▶ Local vars
/myproject/apps/djangobb_forum/views.py in search
for post in posts:
...
▶ Local vars
/myproject/apps/haystack/query.py in _manual_iter
if not self._fill_cache(current_position, current_position + ITERATOR_LOAD_PER_QUERY):
...
▶ Local vars
/myproject/apps/haystack/query.py in _fill_cache
results = self.query.get_results()
...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in get_results
self.run()
...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in run
results = self.backend.search(final_query, **kwargs)
...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in wrapper
return func(obj, query_string, *args, **kwargs)
...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in search
self.setup()
...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in setup
self.content_field_name, self.schema = self.build_schema(self.site.all_searchfields())
...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in build_schema
raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
...
▶ Local vars
答案 0 :(得分:2)
从您列出的安装步骤来看,听起来好像您错过了几个步骤。
明确重新审视Haystack setup instructions,特别注意查看“创建搜索网站”和“创建索引”部分。
您的好处和缺点似乎是缺少索引文件。 Haystack在首次包含时会从索引中注册一堆东西,这就解释了为什么你从haystack.__init__
将名为“search_indexes.py”的文件添加到您的应用程序目录中。此文件包含要为不同模型生成的索引的列表。一个简单的例子是:
from haystack.indexes import *
from haystack import site
from myapp.models import MyModel
class MyModelIndex(SearchIndex):
text = CharField(document=True, use_template=True)
def prepare(self, obj):
self.prepared_data = super(MyModelIndex, self).prepare(obj)
self.prepared_data['text'] = obj.my_field
site.register(MyModel, MyModelIndex)
这会在索引中添加一个名为“text”的自由文本搜索字段。当您搜索没有要指定的搜索字段的自由文本时,haystack将默认搜索此字段。模型my_field
中的属性MyModel
将添加到此文本字段中,并可进行搜索。例如,这可以是模型的名称或一些适当的文本字段。这个例子有点天真,但它现在可以帮助你开始运行,然后你可以读一下并扩展它。
调用site.register
针对模型MyModel
注册此索引,以便haystack可以发现它。
您还需要在项目目录中使用名为search_sites.py
的文件(根据您的设置命名)指向您刚刚创建的索引文件。添加以下内容将使您查看应用程序并自动发现您已注册的任何索引。
import haystack
haystack.autodiscover()
答案 1 :(得分:2)
您需要根据ur settings.py在项目根目录目录中创建 search_sites.py 并添加
import haystack
haystack.autodiscover()
这将修复“没有名为search_sites的模块”错误 这是Django-Haystack配置的LatestDocs