Does django-haystack give an attribute error?

I am trying to use Haystack and Whoosh with my Django app. I followed the steps in Haystack docs, but I get this error when I search

AttributeError at /search/ 'module' object has no attribute 'get_model' 

search_indexes.py -

 import datetime from haystack import indexes from movies.models import Movie class MovieIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) title = indexes.CharField(model_attr='title') def get_model(self): return Movie def index_queryset(self, using=None): """Used when the entire index for model is updated.""" return self.get_model().objects.all() 

I could not find help with this error anywhere, what am I doing wrong?

Stacktrace -

 Environment: Request Method: GET Request URL: http://127.0.0.1:8000/search/?q=The+Revenant&models=movies.movie Django Version: 1.9.1 Python Version: 2.7.6 Installed Applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'whoosh', 'haystack', 'registration', 'crispy_forms', 'movies', 'mptt') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware') Traceback: File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 149. response = self.process_exception_by_middleware(e, request) File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 147. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/views.py" in __call__ 51. self.results = self.get_results() File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/views.py" in get_results 91. return self.form.search() File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/forms.py" in search 116. return sqs.models(*self.get_models()) File "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/forms.py" in get_models 110. search_models.append(models.get_model(*model.split('.'))) Exception Type: AttributeError at /search/ Exception Value: 'module' object has no attribute 'get_model' 

Python 2.7.6
Django 1.9.1
Haystack 2.4.1
Whoosh 2.7.0

+7
python django django-haystack whoosh
source share
3 answers

This looks like a compatibility issue between the version of Haystack and Django. Django recently redesigned the get_model system (I think in 1.9), so if you upgraded Django and not Haystack, or maybe the other way around, this could be a problem.

I assume that the get_model() links in your index file are potential rednecks and that the problem is inside the Haystack internal structure, since it cannot find the method in which it calculates.

+6
source share

I replaced the following line in haystack \ forms.py:

 if self.is_valid(): for model in self.cleaned_data['models']: search_models.append(models.get_model(*model.split('.'))) 

:

 if self.is_valid(): for model in self.cleaned_data['models']: model_info = model.split('.') search_models.append(apps.get_model(app_label=model_info[0], model_name=model_info[1])) 

Upon import

 from django.apps import apps 

I found that the line changed simply by executing the error column that I was getting. For you, this is like "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/forms.py"

EDIT: getting the latest haystack resolves the issue

 pip uninstall django-haystack pip install git+https://github.com/django-haystack/django-haystack.git 

from Django-Haystack: the NoneType object does not have the _default_manager attribute

+6
source share

Just define a new method in your Search Index class (search_indexes.py)

 from .models import mymodel from haystack import indexes class MyIndex(indexes.SearchIndex,indexes.Indexable): def get_model(self): return mymodel 
0
source share

All Articles