gpt4 book ai didi

django - 使用Haystack构面提供多个搜索字段

转载 作者:行者123 更新时间:2023-12-03 01:07:21 24 4
gpt4 key购买 nike

我正在编写一个简单的图书馆应用程序(目前仅是一个图书数据库),并且有一个Haystack搜索页作为主页。我正在尝试向页面添加多个搜索字段,因此您可以专门在标题,作者等中进行搜索,而不仅仅是一个通用的“关键字”搜索。我一直在尝试使用Haystack的“构面”功能来完成这项工作,但是它似乎更着眼于根据给定的严格类别优化搜索。

您可以使用Haystack构面来提供多个搜索字段吗?还是Haystack只是不能胜任这种工作?如果是这样,我应该改用什么?

如果需要更多上下文,当前项目为available on GitHub

最佳答案

试试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(或所需的父级)继承并扩展search方法。这样,您就可以节省大部分正确处理数据的工作,并使API与SearchView兼容。

可以从这个问题获得更多帮助 django haystack custom form

关于django - 使用Haystack构面提供多个搜索字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25967372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com