Haystack 简单搜索。没有显示对象
Haystack simple search. No objects displayed
我正在尝试将 djangohaystack
simple backend
添加到我的 Django 应用程序中。我已尝试按照教程进行操作,但 Person
中的 none 个对象正在模板中呈现。我不知道我可能错过了什么。 {% if query %}
条件成立,但不满足下一个for循环,显示No results to display
。
models.py
class Person(models.Model):
person_name = models.CharField(max_length=200)
score = models.FloatField()
search_indexes.py
class PersonIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
person_name = indexes.CharField(model_attr='person_name')
def get_model(self):
return Person
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()
site.register(Person, PersonIndex)
note_text
{{ object.person_name }}
search.html
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.person_name }}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% endif %}
这就是我的全部。我知道 simplebackend
不应该进行广泛的搜索,但它必须在精确名称搜索后得到 return 结果,我需要在 heroku 上部署它,而 heroku 只支持搜索引擎,因为价格昂贵 add-ons.Any 想知道他们是否是我可能错过的东西?
/*********************编辑 1********************/
class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = PersonSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
def get_object(self):
person_id = self.kwargs.get('pk',None)
return Movie.objects.get(pk=person_id)
完整追溯 -
AttributeError at /search/
'module' object has no attribute 'get_model'
Exception Location: C:\Users\final\lib\site-packages\haystack\forms.py in get_models, line 110
Traceback:
File "C:\Users\final\lib\site-packages\django\core\handlers\base.py" in get_response
149.response = self.process_exception_by_middleware(e, request)
File "C:\Users\final\lib\site-packages\django\core\handlers\base.py" in get_response
147.response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\final\lib\site-packages\haystack\views.py" in __call__
51.self.results = self.get_results()
File "C:\Users\final\lib\site-packages\haystack\views.py" in get_results
91.return self.form.search()
File "C:\Users\final\lib\site-packages\haystack\forms.py" in search
116.return sqs.models(*self.get_models())
File "C:\Users\final\lib\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'
尝试测试
# -*- coding: utf-8 -*-
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[look at manage.py]")
import django
from django.core.management import call_command
from haystack.query import SearchQuerySet
django.setup()
call_command('rebuild_index')
print SearchQuerySet().all()
我查看了 haystack 资源,get_model 转移到 django19 中的应用程序
this is working example
我在使用过滤器(使用多个索引模型)进行搜索时遇到了类似的问题。通过在 forms.py(github link 到 django-haystack/haystack/forms.py https://github.com/django-haystack/django-haystack/blob/master/haystack/forms.py)
中添加以下代码修复了该问题
from haystack.utils.app_loading import haystack_get_model
对于简单的后端...这是我的 View.py
from haystack.utils import Highlighter
from haystack.query import SearchQuerySet
def search_title(request):
query = request.POST.get("search_text",' ')
food = SearchQuerySet().models(Food).filter(content__exact = query)
veg = SearchQuerySet().models(Veg).using('default').autocomplete(content_auto = query).highlight()
beverage = SearchQuerySet().models(Beverage).autocomplete(content_auto = query)
food = Highlighter(food)
return render(request,'food/products.html',{'food':food,'veg':veg,'beverage':beverage,'query':query})
我认为问题出在你的观点上part.Modifying你将代码渲染到一些自定义模板的观点将解决这个问题。
我正在尝试将 djangohaystack
simple backend
添加到我的 Django 应用程序中。我已尝试按照教程进行操作,但 Person
中的 none 个对象正在模板中呈现。我不知道我可能错过了什么。 {% if query %}
条件成立,但不满足下一个for循环,显示No results to display
。
models.py
class Person(models.Model):
person_name = models.CharField(max_length=200)
score = models.FloatField()
search_indexes.py
class PersonIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
person_name = indexes.CharField(model_attr='person_name')
def get_model(self):
return Person
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()
site.register(Person, PersonIndex)
note_text
{{ object.person_name }}
search.html
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.person_name }}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% endif %}
这就是我的全部。我知道 simplebackend
不应该进行广泛的搜索,但它必须在精确名称搜索后得到 return 结果,我需要在 heroku 上部署它,而 heroku 只支持搜索引擎,因为价格昂贵 add-ons.Any 想知道他们是否是我可能错过的东西?
/*********************编辑 1********************/
class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = PersonSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
def get_object(self):
person_id = self.kwargs.get('pk',None)
return Movie.objects.get(pk=person_id)
完整追溯 -
AttributeError at /search/
'module' object has no attribute 'get_model'
Exception Location: C:\Users\final\lib\site-packages\haystack\forms.py in get_models, line 110
Traceback:
File "C:\Users\final\lib\site-packages\django\core\handlers\base.py" in get_response
149.response = self.process_exception_by_middleware(e, request)
File "C:\Users\final\lib\site-packages\django\core\handlers\base.py" in get_response
147.response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\final\lib\site-packages\haystack\views.py" in __call__
51.self.results = self.get_results()
File "C:\Users\final\lib\site-packages\haystack\views.py" in get_results
91.return self.form.search()
File "C:\Users\final\lib\site-packages\haystack\forms.py" in search
116.return sqs.models(*self.get_models())
File "C:\Users\final\lib\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'
尝试测试
# -*- coding: utf-8 -*-
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[look at manage.py]")
import django
from django.core.management import call_command
from haystack.query import SearchQuerySet
django.setup()
call_command('rebuild_index')
print SearchQuerySet().all()
我查看了 haystack 资源,get_model 转移到 django19 中的应用程序 this is working example
我在使用过滤器(使用多个索引模型)进行搜索时遇到了类似的问题。通过在 forms.py(github link 到 django-haystack/haystack/forms.py https://github.com/django-haystack/django-haystack/blob/master/haystack/forms.py)
中添加以下代码修复了该问题from haystack.utils.app_loading import haystack_get_model
对于简单的后端...这是我的 View.py
from haystack.utils import Highlighter
from haystack.query import SearchQuerySet
def search_title(request):
query = request.POST.get("search_text",' ')
food = SearchQuerySet().models(Food).filter(content__exact = query)
veg = SearchQuerySet().models(Veg).using('default').autocomplete(content_auto = query).highlight()
beverage = SearchQuerySet().models(Beverage).autocomplete(content_auto = query)
food = Highlighter(food)
return render(request,'food/products.html',{'food':food,'veg':veg,'beverage':beverage,'query':query})
我认为问题出在你的观点上part.Modifying你将代码渲染到一些自定义模板的观点将解决这个问题。