По шагам установки, которые вы перечислили, звучит так, как будто вы пропустили несколько шагов.
Обязательно ознакомьтесь с инструкциями по настройке Haystack , чтобы обратить особое внимание на разделы Создание сайта поиска и Создание индексов.
Длинное и короткое - это то, что вам не хватает файла индексов. 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)
Это добавит поле произвольного текстового поиска под названием «текст» к вашему индексу. Когда вы ищете свободный текст без указанного поля, стог сена будет искать это поле по умолчанию. Свойство my_field
из модели MyModel
добавляется в это текстовое поле и становится доступным для поиска. Это может быть, например, название модели или какое-то подходящее текстовое поле. Пример немного наивный, но пока он поможет вам запустить и запустить что-то, а затем вы можете немного его прочитать и развернуть.
При вызове site.register
этот индекс регистрируется в модели MyModel
, поэтому стог сена может его обнаружить.
Вам также понадобится файл с именем search_sites.py
(имя в соответствии с вашими настройками) в каталоге вашего проекта, чтобы указать на индексные файлы, которые вы только что создали. Добавление следующего позволит вам просматривать ваши приложения и автоматически обнаруживать все зарегистрированные вами индексы.
import haystack
haystack.autodiscover()