我正在编写一个简单的图书馆应用程序(目前只是一个图书数据库),我有一个Haystack搜索页面作为主页。我正在尝试向页面添加多个搜索字段,因此您可以专门搜索标题,作者等,而不只是一个通用的“关键字”搜索。我一直在尝试使用Haystack的“faceting”功能,但它似乎更倾向于根据给定的严格类别改进搜索。
您可以使用Haystack构面提供多个搜索字段吗?或者Haystack是不是因为这种工作而被裁掉了?如果是这样,我应该使用什么呢?
如果您需要更多上下文,则当前项目为available on GitHub。
答案 0 :(得分:2)
尝试使用ModelSearchForm。此表单添加了要创建的新字段。它遍历当前SearchSite的所有已注册模型,并为每个模型提供一个复选框。如果未选择任何模型,则所有类型都将显示在结果中。
来自文档的自定义表单示例,可以从ModelSearcForm简单地转换为ModelSearchForm
from django import forms
from haystack.forms import SearchForm
class DateRangeSearchForm(SearchForm):
start_date = forms.DateField(required=False)
end_date = forms.DateField(required=False)
def search(self):
# First, store the SearchQuerySet received from other processing.
sqs = super(DateRangeSearchForm, self).search()
if not self.is_valid():
return self.no_query_found()
# Check to see if a start_date was chosen.
if self.cleaned_data['start_date']:
sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date'])
# Check to see if an end_date was chosen.
if self.cleaned_data['end_date']:
sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date'])
return sqs
DateRange SearchForm是一种自定义表单,具有更大的灵活性,因为它可以更好地控制开发人员。创建自己的表单最简单的方法是从SearchForm(或所需的父级)继承并扩展搜索方法。通过这样做,您可以节省大部分正确处理数据的工作,并保持与SearchView的API兼容。
此问题可以提供更多帮助django haystack custom form