2016-01-03 17 views
7

Ich versuche Haystack und Whoosh mit meiner Django App zu verwenden. Ich folgte den Schritten auf Haystack docs, aber ich bin immer diese Fehlermeldung, wenn ich eine SucheDjango-Haystack gibt Attributfehler?

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() 

ich keine Hilfe zu diesem Fehler irgendwo finden konnte, was am ich mache falsch?

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

+0

ich denke voller Zurückverfolgungs notwendig. – kxxoling

+0

Übrigens, welche Versionen sind Django, Haystack und Whoosh? Ich habe einen ähnlichen Fehler mit der alten Version von Haystack gefunden, die den wahren Fehler dahinter versteckt. – kxxoling

+0

Danke für Ihre Antwort, ich habe die Frage aktualisiert, wie Sie gesagt haben. – doctorsherlock

Antwort

6

, der wie ein Kompatibilitätsproblem zwischen der Version sieht für mich von Heuhaufen und Django. Django hat kürzlich das get_model System überarbeitet (ich denke in 1.9), also, wenn Sie Django und nicht Haystack - oder vielleicht umgekehrt - aktualisiert haben, könnte das Problem sein.

Ich vermute, die get_model() Referenzen in Ihrer Indexdatei sind ein potenzieller Red-Hering, und das Problem ist innerhalb der Haystack Interna, da es nicht in der Lage ist, diese Methode zu finden, wo es erwartet.

+0

Das scheint das Problem, was soll ich tun? – doctorsherlock

+0

Ich habe Django 1.8.8 installiert und jetzt funktioniert es. Muss ein Problem sein mit Django 1.9 – doctorsherlock

+0

Ich hätte eher ein Haystack-Kompatibilitätsproblem - oder möglicherweise ein Whoosh-Kompatibilitätsproblem - mit Django 1.9 – Steadman

6

I ersetzt die folgende Zeile in forms.py Heuhaufen \:

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

durch diese:

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])) 

Mit dem Import

from django.apps import apps 

ich die Linie gefunden einfach zu ändern indem ich dem Fehler-Callstack folgte, den ich bekam. Für Sie scheint es in "/home/dr_sherlock/movienalyse/virmovienalyse/local/lib/python2.7/site-packages/haystack/forms.py" zu sein.

EDIT: Holen Sie sich die neueste Version von Heuhaufen löst die Ausgabe

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

von Django-Haystack: 'NoneType' object has no attribute '_default_manager'

+1

Die neueste Version von Heuhaufen zu bekommen hat auch für mich funktioniert – thanksd

0

einfach eine neue Methode in Ihrem Suchindex Klasse (search_indexes.py) definieren

from .models import mymodel 
from haystack import indexes 
class MyIndex(indexes.SearchIndex,indexes.Indexable): 

    def get_model(self): 
     return mymodel