django-haystack: у объекта нет атрибута Indexable - PullRequest
3 голосов
/ 02 февраля 2012

Я новичок в django-haystack, и я пытаюсь следовать руководству по началу работы.Тем не менее, я сталкиваюсь с AttributeError: объект не имеет атрибута «Indexable».

В моем файлеins.py у меня есть:

HAYSTACK_SITECONF = 'mysite.search_sites'
HAYSTACK_SEARCH_ENGINE = 'solr'
HAYSTACK_SOLR_URL = 'http://127.0.0.1:8983/solr'

В моем models.py (который находится в моем приложении).называется "searchapp"), у меня есть:

from django.db import models
from django.contrib.auth.models import User


class baymodel(models.Model):
    id = models.IntegerField(primary_key=True)
    domain = models.CharField(max_length=765, db_column='Domain', blank=True)
    category = models.CharField(max_length=765, db_column='Category', blank=True) 
    link = models.CharField(max_length=765, db_column='Link') 
    name = models.CharField(max_length=765, db_column='Name', blank=True) 
    cur_timestamp = models.DateTimeField()

    def __unicode__(self):
      return self.name

    def index_queryset(self):
    """Used when the entire index for model is updated."""
       return self.objects.all()

В моем search_indexes.py (находящемся в моем каталоге searchapp) у меня тогда есть:

import datetime
from haystack import indexes
from searchapp.models import baymodel


class baymodelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='user')
    link = indexes.CharField(model_attr='link')
    domain = indexes.CharField(model_attr='domain')
    pub_date = indexes.DateTimeField(model_attr='cur_timestamp')

def get_model(self):
    return baymodel

site.register(baymodel, baymodelIndex)

В search_sites.py яhave:

import haystack
haystack.autodiscover()

Я установил solr в соответствии с их инструкциями, и я вижу страницу администрирования довольно solr.

Теперь, когда я это сделаю:

sudo python manage.py build_solr_schema

Я получаю AttributeError:

AttributeError: 'module' object has no attribute 'Indexable'

Я пытался сделать:

python ./manage.py shell

, и я снова получаю:

AttributeError: 'module' object has no attribute 'Indexable'

Если я просто захожу вPython и попытаться импортировать стог сена, я получаю:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import haystack
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/haystack/__init__.py", line 26, in <module>
raise ImproperlyConfigured("You must define the HAYSTACK_SITECONF setting before using the search framework.")
django.core.exceptions.ImproperlyConfigured: You must define the HAYSTACK_SITECONF  setting before using the search framework.

, что странно, потому что мой settings.py действительно определяет HAYSTACK_CONF и python ./manage.py оболочка выдает AttributeError.

Есть кто-нибудьсталкивался с подобной ошибкой?Спасибо.

1 Ответ

4 голосов
/ 02 февраля 2012

Код основан на стоге сена 2, который находится в разработке, v2 меняет способ определения индексов. Установленная версия - 1.2, поэтому правильные документы доступны здесь , например,

class BayModelIndex(indexes.SearchIndex, indexes.Indexable):

должно быть (при правильном импорте SearchIndex):

class BayModelIndex(SearchIndex):

также вместо get_model классу индекса необходимо определить index_queryset, который должен возвращать QuerySet.

...