<p>我想做一些类似的事情,所以我创建了一个名为<strong>搜索的应用程序</p>
<p><strong>搜索/模型.py</strong></p>
<pre><code>from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
class SearchTerm(models.Model):
query = models.CharField(
verbose_name = _(u'Search Term'),
max_length = 255,
default = None
)
class SearchQuery(models.Model):
term = models.ForeignKey(
SearchTerm
)
user = models.ForeignKey(
User,
blank = True,
null = True,
)
when = models.DateTimeField(
verbose_name = _(u'Date Searched'),
)
</code></pre>
<p><strong>搜索/网址.py</strong></p>
^{pr2}$
<p>当然,在我的项目URL中,我添加了以下规则:</p>
<pre><code>url(r'^', include('search.urls')),
</code></pre>
<p><strong>搜索/视图.py</strong></p>
<pre><code>from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render, redirect
from haystack.forms import ModelSearchForm, SearchForm
from haystack.views import SearchView
from search.models import SearchQuery, SearchTerm
import datetime
def search(request):
if 'page' not in request.GET :
try :
st, created = SearchTerm.objects.get_or_create(query=request.GET['q'])
sq = SearchQuery()
sq.term = st
sq.user = request.user
sq.when = datetime.datetime.now()
sq.save()
except :
pass
view = SearchView()
return view(request)
</code></pre>
<p><code>if 'page' not in request.GET</code>这样只在搜索结果的第一页上保存搜索查询</p>
<p>每个SearchQuery在数据库中都是唯一的。在</p>
<p>每个SearchTerm的SearchQuery都会记录附加信息,例如<code>user</code>(可为空)和{<cd3>}搜索到的术语。在</p>
<p><code>view = SearchView()</code>和<code>return view(request)</code>使其在记录搜索查询后,为该请求调用默认的haystack视图。在</p>