我是django-haystack的新手 . 根据文档和教程,我能够基于文档内容(DataBase SQLITE)创建搜索应用程序 . 下一步,我已更新我的HTML模板以请求更多信息(例如:模型,所需的数据库链接等)
我不知道如何处理这个问题 . 在我正在使用的文件下面 . 我的知识仍然很基础,所以任何帮助都会非常感激 .
谢谢 .
search.html
{% extends 'base.html' %}
{% block content %}
<h2> Doc Search Interface</h2>
<form method="get" action=".">
<table>
<P>Select Car Model:</P>
<P><LABEL ACCESSKEY=5><INPUT TYPE=checkbox NAME="CarModel" VALUE="A5"> A5</LABEL><BR>
<LABEL ACCESSKEY=8><INPUT TYPE=checkbox NAME="CarModel" VALUE="A8"> A8</LABEL><BR>
<LABEL ACCESSKEY=3><INPUT TYPE=checkbox NAME="CarModel" VALUE="A3"> A3</LABEL></P>
<tr>
<P>Type and click enter for Search!</P>
<input type="search" id="id_q" name="q" placeholder="Search" >
</tr>
</table>
{% if query %}
<h3>Let´s see if we have got here the document you were looking for...</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
{% endblock %}
models.py
from django.db import models
from django.contrib.auth.models import User
from django.template import RequestContext
from django.http import HttpResponse
class Document(models.Model):
user_id = models.CharField(max_length=6, default='admin')
pub_date = models.DateTimeField()
title = models.CharField(max_length=200)
Link= models.URLField()
content = models.TextField()
CarModel= models.TextField()
def get_absolute_url(self):
return self.Link
def __unicode__(self):
return self.title
search_indexes.py
from haystack import indexes
from test3.models import Document
class DocumentIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
content_auto=indexes.EdgeNgramField(model_attr='content')
CarModel=indexes.EdgeNgramField(model_attr='CarModel')
def get_model(self):
return Document
def index_queryset(self, using=None):
"""Used when the entire index for model is updated. Typically to avoid some results showing when admin do not want to"""
return self.get_model().objects
在这篇文章之后Using django haystack search with global search bar in template我更新了以下文件
urls.py
from django.conf.urls import url
from test3.views import MySearchView
# urls.py
urlpatterns = [url(r'^/search/?$', MySearchView.as_view(), name='My_search_view'),]
views.py
from haystack.forms import HighlightedSearchForm
from haystack.query import SearchQuerySet
from haystack.generic_views import SearchView
from haystack.views import search_view_factory
class MySearchView(SearchView):
"""My custom search view."""
def search_posts(request):
post_type = str(request.GET.get('CarModel')).lower()
print (str(request.GET.get('CarModel')).lower())
sqs = SearchQuerySet().filter(CarModel__contains=post_type)
clean_query = sqs.query.clean(post_type)
result = sqs.filter(content=clean_query)
view = search_view_factory(
view_class=SearchView,
template='search/search.html',
searchqueryset=result,
form_class=HighlightedSearchForm
)
return view(request)
但是,我仍然没有使它工作...搜索结果仍未按“模型”字段过滤 . 我想我必须添加额外的代码,但我不知道在哪里......
1 回答
我会尝试回应这个 . 这就是我的工作方式:
在 yourapp/urls.py
在 yourapp/views.py 导入您的NotesSearchForm(在下面进一步)并在搜索时调用它:
然后在你的_1875859中发生魔法:
请注意,我在这里将'genre'作为模型中命名的字段 . 此字段也需要出现在 search_indexes.py 中,如下所示:
最后,让我告诉你 yourapp/templates/notes/index.html :
希望这对你有用!如果你遇到困难,请告诉我 .