Django+Haystack:异常值:'module' 对象没有属性 'get_model'
Django+Haystack: Exception Value: 'module' object has no attribute 'get_model'
我建立了一个非常简单的项目来使用 Whoosh 引擎试用 Haystack,主要遵循文档中的示例。我使用 pip 安装了所有东西,没有版本号,所以我应该有最新的发布版本。
我遇到了这个错误,我不知道我现在应该做什么,虽然我已经搜索过 Google,但我找不到任何类似的东西。请帮忙!
项目文件夹结构很简单,一个叫cat的app。
project
|-cat
| |-migrations
| |-admin.py, apps.py, models.py, search_indexes.py
|-templates
| |-search
| |-indexes
| | |-cat
| | |-cat_text.txt
| |-search.html
|-manage.py, settings.py, urls.py
我得到的错误是:
Environment:
Request Method: GET
Request URL: http://localhost:8000/search/?q=felix&models=cat.cat
Django Version: 1.9.4
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'haystack',
'cat',]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'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']
Traceback:
File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/views.py" in __call__
51. self.results = self.get_results()
File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/views.py" in get_results
91. return self.form.search()
File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/forms.py" in search
116. return sqs.models(*self.get_models())
File "/Users/lebouuski/projects/django/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'
models.py:
class Cat(models.Model):
name = models.CharField(max_length=255)
birth_date = models.DateField(default=datetime.date.today)
bio = models.TextField(blank=True)
created = models.DateTimeField(default=datetime.datetime.now)
updated = models.DateTimeField(default=datetime.datetime.now)
def __unicode__(self):
return self.name
@models.permalink
def get_absolute_url(self):
return ('cat_detail', [], {'id': self.id})
search_indexes.py
class CatIndex(indexes.BasicSearchIndex, indexes.Indexable):
def get_model(self):
return Cat
解决方案:将 Django 从 1.9 降级到 1.8
sudo pip install Django==1.8
动机在这里:
对于其他遇到这个问题的人来说,这都是由于 Django 1.9 中的一个小变化,其中 get_model()
方法被移动到 django.apps.apps
模块,并且不再可用django.db
该问题现已在 Haystack 社区中得到解决,因此从他们的 GitHub 存储库(而不是 PyPI)更新到最新版本必须解决它。
以下应该可以解决:
pip install git+https://github.com/django-haystack/django-haystack.git
或者您可以按照 Sam 的建议简单地降级到 Django 1.8。
您可以找到有关此问题的更多信息 here
我建立了一个非常简单的项目来使用 Whoosh 引擎试用 Haystack,主要遵循文档中的示例。我使用 pip 安装了所有东西,没有版本号,所以我应该有最新的发布版本。
我遇到了这个错误,我不知道我现在应该做什么,虽然我已经搜索过 Google,但我找不到任何类似的东西。请帮忙!
项目文件夹结构很简单,一个叫cat的app。
project |-cat | |-migrations | |-admin.py, apps.py, models.py, search_indexes.py |-templates | |-search | |-indexes | | |-cat | | |-cat_text.txt | |-search.html |-manage.py, settings.py, urls.py
我得到的错误是:
Environment: Request Method: GET Request URL: http://localhost:8000/search/?q=felix&models=cat.cat Django Version: 1.9.4 Python Version: 2.7.10 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'haystack', 'cat',] Installed Middleware: ['django.middleware.security.SecurityMiddleware', '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'] Traceback: File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 149. response = self.process_exception_by_middleware(e, request) File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 147. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/views.py" in __call__ 51. self.results = self.get_results() File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/views.py" in get_results 91. return self.form.search() File "/Users/lebouuski/projects/django/lib/python2.7/site-packages/haystack/forms.py" in search 116. return sqs.models(*self.get_models()) File "/Users/lebouuski/projects/django/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'
models.py:
class Cat(models.Model):
name = models.CharField(max_length=255)
birth_date = models.DateField(default=datetime.date.today)
bio = models.TextField(blank=True)
created = models.DateTimeField(default=datetime.datetime.now)
updated = models.DateTimeField(default=datetime.datetime.now)
def __unicode__(self):
return self.name
@models.permalink
def get_absolute_url(self):
return ('cat_detail', [], {'id': self.id})
search_indexes.py
class CatIndex(indexes.BasicSearchIndex, indexes.Indexable):
def get_model(self):
return Cat
解决方案:将 Django 从 1.9 降级到 1.8
sudo pip install Django==1.8
动机在这里:
对于其他遇到这个问题的人来说,这都是由于 Django 1.9 中的一个小变化,其中 get_model()
方法被移动到 django.apps.apps
模块,并且不再可用django.db
该问题现已在 Haystack 社区中得到解决,因此从他们的 GitHub 存储库(而不是 PyPI)更新到最新版本必须解决它。
以下应该可以解决:
pip install git+https://github.com/django-haystack/django-haystack.git
或者您可以按照 Sam 的建议简单地降级到 Django 1.8。 您可以找到有关此问题的更多信息 here