2014-10-28 2 views
0

Я хочу использовать стог сена, но все мои модели имеют «тело» в качестве имени текстового поля. это все равно на всех моделях.Как изменить название документа = Истинное поле Haystack в Django?

Теперь я получаю эту ошибку:

All 'SearchIndex' classes must use the same 'text' fieldname for the 'document=True' field. Offending index is '<qna.search_indexes.QuestionIndex object at 0x2435328>'. 

Это индексный файл:

импорт DateTime из Стог импорта индексов из qna.models импорта Вопрос

class QuestionIndex(indexes.SearchIndex, indexes.Indexable): 
    subject = indexes.CharField(document=False, use_template=False) 
    body = indexes.CharField(document=True, use_template=True, model_attr='user') 
    pub_date = indexes.DateTimeField(model_attr='pub_date') 

    def get_model(self): 
     return Question 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now()) 

Это Единственный! С чем это обижает? Насколько я понимаю, имя поля не обязательно должно быть «текстом», оно должно быть одинаковым для каждого поля. Но это единственное поле! Нужно ли мне менять конфигурацию? Что может быть причиной этого ... ??

ответ

1

Я видел вашу ошибку в источнике сена. Похоже, есть установка для названия этого поля (https://github.com/toastdriven/django-haystack/blob/master/haystack/utils/loading.py#L154):

self.document_field = getattr(settings, 'HAYSTACK_DOCUMENT_FIELD', 'text') 

Позже в этом файле (https://github.com/toastdriven/django-haystack/blob/master/haystack/utils/loading.py#L222) он проверяет, чтобы убедиться, что ваше имя индекса матчей и взрывает с ошибкой вы видели, если они не согласны:

if field_object.index_fieldname != self.document_field: 
    raise SearchFieldError("All 'SearchIndex' classes must use the same '%s' fieldname for the 'document=True' field. Offending index is '%s'." % (self.document_field, index)) 

Если вы установите HAYSTACK_DOCUMENT_FIELD в «тело» в настройках, это похоже, что должен это сделать.

Смежные вопросы