使用多个 URL 参数查询干草堆搜索
Query haystack search with multiple URL params
我的搜索在大多数情况下都按照我需要的方式工作,但我希望能够根据用户选择的类别进行排序。
我已将 searchForm
分类为包含:
def no_query_found(self):
"""
Determines the behavior when no query was found.
By default, no results are returned (``EmptySearchQuerySet``).
Should you want to show all results, override this method in your
own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
"""
return self.searchqueryset.models(Idea)
def search(self):
sqs = super(IdeaCategories, self).search()
if not self.is_valid():
return self.no_query_found()
if self.cleaned_data['category']:
sqs = sqs.filter(tags__contains=self.cleaned_data['category'])
return sqs
以下按预期工作:
/testing/search/?q=test
-> 所有与“测试”相关的结果
/testing/search/?category=Development&q=
-> 所有与“发展”相关的结果
/testing/search/?category=Development&q=book
-> 所有与“开发”相关且包含“书籍”的结果
我唯一想不通的是如何让它在 2 个或更多的类别上正确搜索:
/testing/search/?category=Development&category=Supplemental+Material&q=
有没有办法获取类别列表、查询和筛选组合结果?如:
sqs = sqs.filter(tags__contains["Development", "Supplemental Material"])
好的!所以我现在想通了。
在我的搜索表单中 class:
我从数据库中创建了一个选项列表以在表单中使用。
choices_group = tuple(
[(choice, choice) for choice in
Category.objects.values_list('label', flat=True)])
将这些选择应用于我的表单。
sort = forms.MultipleChoiceField(choices=choices_group, widget=forms.CheckboxSelectMultiple)
创建了我的查询集。
q_sorted = self.cleaned_data['sort']
if q_sorted:
sqs = sqs.filter(tags__in=q_sorted)
最后,在我的模板中。
{{form.sort}}
我的搜索在大多数情况下都按照我需要的方式工作,但我希望能够根据用户选择的类别进行排序。
我已将 searchForm
分类为包含:
def no_query_found(self):
"""
Determines the behavior when no query was found.
By default, no results are returned (``EmptySearchQuerySet``).
Should you want to show all results, override this method in your
own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
"""
return self.searchqueryset.models(Idea)
def search(self):
sqs = super(IdeaCategories, self).search()
if not self.is_valid():
return self.no_query_found()
if self.cleaned_data['category']:
sqs = sqs.filter(tags__contains=self.cleaned_data['category'])
return sqs
以下按预期工作:
/testing/search/?q=test
-> 所有与“测试”相关的结果
/testing/search/?category=Development&q=
-> 所有与“发展”相关的结果
/testing/search/?category=Development&q=book
-> 所有与“开发”相关且包含“书籍”的结果
我唯一想不通的是如何让它在 2 个或更多的类别上正确搜索:
/testing/search/?category=Development&category=Supplemental+Material&q=
有没有办法获取类别列表、查询和筛选组合结果?如:
sqs = sqs.filter(tags__contains["Development", "Supplemental Material"])
好的!所以我现在想通了。
在我的搜索表单中 class:
我从数据库中创建了一个选项列表以在表单中使用。
choices_group = tuple(
[(choice, choice) for choice in
Category.objects.values_list('label', flat=True)])
将这些选择应用于我的表单。
sort = forms.MultipleChoiceField(choices=choices_group, widget=forms.CheckboxSelectMultiple)
创建了我的查询集。
q_sorted = self.cleaned_data['sort']
if q_sorted:
sqs = sqs.filter(tags__in=q_sorted)
最后,在我的模板中。
{{form.sort}}